LLVM Atomic Instructions and Concurrency Guide
/vagrant/freebsd/lib/libc++/../../contrib/libc++/src/include/atomic_support.h
にて
targetがアトミック性をサポートしているならば_LIBCPP_HAS_ATOMIC_BUILTINS
が有効になる。
#if defined(__clang__) && __has_builtin(__atomic_load_n) \
&& __has_builtin(__atomic_store_n) \
&& __has_builtin(__atomic_add_fetch) \
&& __has_builtin(__atomic_compare_exchange_n) \
&& defined(__ATOMIC_RELAXED) \
&& defined(__ATOMIC_CONSUME) \
&& defined(__ATOMIC_ACQUIRE) \
&& defined(__ATOMIC_RELEASE) \
&& defined(__ATOMIC_ACQ_REL) \
&& defined(__ATOMIC_SEQ_CST)
# define _LIBCPP_HAS_ATOMIC_BUILTINS
#endif
#if !defined(_LIBCPP_HAS_ATOMIC_BUILTINS)
static_assert(false, "_LIBCPP_HAS_ATOMIC_BUILTINS not defined");
#endif
$ /vagrant/build/bin/clang++ -std=c++1z --target=aarch64 test-LIBCPP_HAS_ATOMIC_BUILTINS.cxx -S -o /dev/null
passed!
_LIBCPP_BEGIN_NAMESPACE_STD
の実態はnamespace std {inline namespace __1 {
。inline namespace __1
は透過的にアクセス可能なnamespaceでバージョニングのために設けられている。