我正在使用__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
复制相似问题