I am not sure if we should #include <atomic> but the instantiation of operator* of ManagedStatic needs std::memory_order_aquire. Modules builds error out with:
`In module 'LLVM_Utils' imported from /home/vvassilev/workspace/llvm-git/src/lib/Support/CommandLine.cpp:19:
/home/vvassilev/workspace/llvm-git/src/include/llvm/Support/ManagedStatic.h:66:26: error:
definition of 'memory_order' must be imported from module
'LLVM_Utils.ADT.IntrusiveRefCntPtr' before it is required
void *Tmp = Ptr.load(std::memory_order_acquire);
^/home/vvassilev/workspace/llvm-git/src/include/llvm/Support/ManagedStatic.h:73:29: note:
in instantiation of member function 'llvm::ManagedStatic<(anonymous
namespace)::CommandLineParser>::operator*' requested here
C *operator->() { return &**this; }
^/home/vvassilev/workspace/llvm-git/src/lib/Support/CommandLine.cpp:339:15: note:
in instantiation of member function 'llvm::ManagedStatic<(anonymous
namespace)::CommandLineParser>::operator->' requested here
GlobalParser->addLiteralOption(O, Name);
^/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../include/c++/4.9/bits/atomic_base.h:56:16: note:
previous definition is here
typedef enum memory_order
^1 error generated.
`