Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does boost use C++11 "inline namespaces" to avoid ABI incompatibilty errors at runtime?

C++11 has a feature called "inline namespaces", which allows authors to enforce ABI compatibility at link time without tampering with the API. For instance, these helpful answers from @HowardHinnant explain how libc++ uses inline namespaces:

  • Using libstdc++ compiled libraries with clang++ -stdlib=libc++
  • Why can't clang with libc++ in c++0x mode link this boost::program_options example?

My question is: Does boost make use of this C++11 feature? It looks like some boost devs were at least thinking of eventually using it at one point. But that thread is pretty old. Did it ever happen? If so, does apply to all boost libraries, or only a subset?

like image 607
Stuart Berg Avatar asked Aug 11 '14 15:08

Stuart Berg


1 Answers

Some libraries have started to use it, but not all. For example this is in 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
like image 159
Brandon Kohn Avatar answered Oct 21 '22 04:10

Brandon Kohn