我正在编写一些 C++11 代码,这些代码对以下性质做出了假设std::string
有效,但代表 C++11 中更改的行为。早期,libstdc++ 的basic_string
实现符合 98/03 要求,但不符合更严格的 C++11 要求。
据我了解,libstdc++ 已经解决了以下问题basic_string
。问题是人们使用的库的许多版本都没有实现此修复。我的代码可能会以许多令人不快的方式默默地失败。
我想要一个static_assert
如果用户尝试针对那些不符合标准的 libstdc++ 版本编译我的库,则会触发。如何检测版本,同样重要的是,我应该寻找哪个版本?
新的 C++11 兼容std::string
在 GCC 5 中随新的(双)ABI 一起引入(变更日志的运行时库部分 https://gcc.gnu.org/gcc-5/changes.html).
宏观_GLIBCXX_USE_CXX11_ABI
决定是使用旧的还是新的 ABI,所以只需检查它:
#if _GLIBCXX_USE_CXX11_ABI
当然,这仅特定于 libstdc++。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)