boost是否使用C++ 11"内联命名空间"来避免运行时的ABI不兼容错误?

Stu*_*erg 8 c++ boost c++11 inline-namespaces

C++ 11具有一个称为"内联命名空间"的功能,允许作者在链接时强制执行A​​BI兼容性,而不会篡改API.例如,来自@HowardHinnant的这些有用的答案解释了如何libc++使用内联命名空间:

我的问题是:boost是否使用了这个C++ 11功能?看起来有些提升开发者至少在考虑最终使用它.但那个线程很老了.它曾经发生过吗?如果是这样,是否适用于所有boost库,或仅适用于子集?

Bra*_*ohn 5

一些图书馆已经开始使用它,但不是全部.例如,这是在Boost.Log中:

//! NOTE: I've reformatted this to look cleaner.
#if !defined(BOOST_NO_CXX11_INLINE_NAMESPACES)
    inline namespace BOOST_LOG_VERSION_NAMESPACE {}
    [snip]
#endif
Run Code Online (Sandbox Code Playgroud)