c++ - 测试 libstdc++ 的版本是否使用符合 C++11 的 std::string

标签 c++ c++11 stdstring libstdc++

我正在编写一些 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/

相关文章:

c++ - constexpr 和带有重新解释转换的静态 const void 指针的初始化,哪个编译器是正确的?

c++ - 在 C++11 中实现递归代理模式

c++ - 如何禁止复制构造函数并仅使用移动构造函数?

c++ - 自动将 std::string 转换为 char* 而无需每次调用​​ c_str() 的最佳方法

c++ - Boost.Spirit.Qi : dynamically create "difference" parser at parse time

c++ - 如何调试仅作为独立应用程序死锁的多线程程序

c++ - 如何将这个新的 char** 写入 .bmp 文件?

c++ - 反转 18 位 int 的二进制补码

c++ - std 字符串在类内部损坏

C++ 变量生命周期——需要变通方法来返回临时变量