我正在使用__int128扩展的g++。-std=c++17的问题是,一些C++库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-std=gnu++17时,它工作得很好。
我添加了一个头文件,允许<limit>在使用-std=c++17时与__int128一起工作,我希望暂时保留它,但是在使用-std=gnu++17时它会中断(因为它已经定义好了)。所以我想增加一个这样的条件:
#if !(<something>)
...
#endif如果编译器已经支持__int128的限制。
我的问题是:我可以检查的<something>是什么来区分标准和GNU c++17库?
发布于 2022-10-29 05:25:12
我做了这个:
$ diff <(g++-11 -std=c++17 -E -dM -x c++ /dev/null|LC_ALL=C sort) \
<(g++-11 -std=gnu++17 -E -dM -x c++ /dev/null|LC_ALL=C sort)产出如下:
180a181,182
> #define __GLIBCXX_BITSIZE_INT_N_0 128
> #define __GLIBCXX_TYPE_INT_N_0 __int128
315d316
< #define __STRICT_ANSI__ 1
424a426,427
> #define linux 1
> #define unix 1当然,这还不确定,但这可能是个开始。
所以您可以检查__STRICT_ANSI__ (表示没有Gnu扩展),但可能无法记录的__GLIBCXX_BITSIZE_INT_N_0更直接。
https://stackoverflow.com/questions/74242934
复制相似问题