On Sunday 18 January 2015 17:10:04 John Maddock wrote:
FWIW, I'm using inline namespaces (or emulation in C++03) in Boost.Log, although I don't inject Boost version. Works quite well in detecting configuration mismatch cases, when user's code is compiled in a mode incompatible with the compiled library. I'm not sure how useful this would be with TypeTraits though, given that the traits are compile-time constructs and ABI compatibility is not an issue.
I think you may have hit the nail on head there: are inline namespaces of any use for header-only code?
Yes, they are in general. Things like function, shared_ptr, any, variant are often present in binary interfaces of user's code. Making these component names versioned will make sure that user's ABI wont break if he (accidentally) mix different versions of Boost or different configurations. But that's not the case for libraries like TypeTraits or MPL.