Использует ли Boost C++11 "встроенные пространства имен", чтобы избежать ошибок несовместимости ABI во время выполнения?
C++11 имеет функцию, называемую "встроенными пространствами имен", которая позволяет авторам обеспечивать совместимость ABI во время соединения без вмешательства в API. Например, эти полезные ответы от @HowardHinnant объясняют, как libc++
использует встроенные пространства имен:
- Использование скомпилированных библиотек libstdC++ с clang++ -stdlib=libC++
- Почему нельзя связать с libC++ в режиме C++0x ссылку на этот пример boost::program_options?
Мой вопрос: использует ли boost эту функцию C++11? Похоже, что некоторые разработчики Boost хотя бы думали о том, чтобы использовать его в какой-то момент. Но эта нить довольно старая. Это когда-нибудь случалось? Если да, относится ли это ко всем библиотекам наддува или только к подмножеству?
1 ответ
Решение
Некоторые библиотеки начали его использовать, но не все. Например, это в 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