gpt4 book ai didi

c++ - 如何测试 libstdc++ 的版本

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:56 26 4
gpt4 key购买 nike

因此,当我去调用 std::vector::erase 时,我正在深入编写代码,为我的容器类编写删除方法。用const_iterator如果失败了。就像它对 this person 所做的一样.

点击链接到 gnu libstdc++ status显示此问题仍未修复(原始问题是 2013 年初)。

所以我编写了一个可怕的 hack-around:

#if 1
// horrible hack for gnu libstd++ deficit
// current implementation does not allow erase(const_iterator), so recreate plain iterator
off_t::iterator itx= offsets_.begin() + ( apos.iter() - offsets_.begin() ) ;
#else
// for compliant implementations
auto itx= apos.iter() ;
#endif

但我想知道是否有#define我可以使用与 libstdc++ 版本相关的.有很多可以测试编译器版本的东西,但我不认为 gcc版本将是一个很好的指示器,表明何时修复此问题,并且自 clang 以来默认情况下使用相同的库我需要以任何一种方式捕获它。我看了一下 g++ -E -dM - < /dev/null 的输出但唯一提到 STD 的似乎没有希望:

#define __STDC_HOSTED__ 1
#define __STDC_IEC_559__ 1
#define __STDC_ISO_10646__ 201103L
#define __STDC_NO_THREADS__ 1
#define _STDC_PREDEF_H 1
#define __STDC_IEC_559_COMPLEX__ 1
#define __STDC__ 1

最佳答案

无论如何,你不会被 clang 缠住吗?如果它由 gcc 发行版修复,是否保证由 clang 修复,反之亦然?其他编译器怎么样?

您可以获得compiler defines的列表

例如

#define __GNUC_PATCHLEVEL__
#define __GNUC__
#define __GNUC_MINOR__

或用于 clang

#define __clang__ 
#define __clang_major__
#define __clang_minor__
#define __clang_patchlevel__

你用autotools吗? ?如果是这样,那么由于您无论如何都在考虑将自己从这种情况中解救出来,因此您可以创建一个自动工具测试来创建您自己的定义。测试不需要编译,实际上通常就是测试。

关于c++ - 如何测试 libstdc++ 的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21393950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com