我正在编写一些 C++11 代码,这些代码对 std::string
的性质做出假设,这些假设是有效的,但代表了 C++11 中更改的行为。在早期,libstdc++ 的 basic_string
实现符合 98/03 要求,但不符合更严格的 C++11 要求。
据我了解,libstdc++ 已经修复了围绕 basic_string
的问题。问题是人们使用的许多版本的库都没有实现这个修复。而且我的代码可能会以许多令人不快的方式默默地失败。
如果用户尝试针对那些不符合标准的 libstdc++ 版本编译我的库,我希望触发 static_assert
。如何检测版本,同样重要的是,我应该寻找哪个版本?
最佳答案
在 GCC 5 (Runtime Library Section of the changelog) 中引入了新的符合 C++11 标准的 std::string
和新的(双)ABI。
宏_GLIBCXX_USE_CXX11_ABI
决定是使用旧的还是新的ABI,所以检查一下:
#if _GLIBCXX_USE_CXX11_ABI
当然,这仅适用于 libstdc++。
关于c++ - 测试 libstdc++ 的版本是否使用符合 C++11 的 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34375913/