[英]Determine gcc-toolchain version in clang++ preprocessor
根据cppreference ,gcc libstdc++ 支持并行性 TS。 用外行的术语和与我相关的内容来说,这意味着#include <execution>
在 g++ 9 中有效,而在 g++ 8 或更早版本中无效。 在我的源代码中,我可以处理这个
#if ( defined( __GNUC__ ) && __GNUC__ > 8 )
# define can_use_std_execution
# include <execution>
#endif
对于我的 clang++ 构建, <execution>
的可用性取决于我使用的--gcc-toolchain
。 因此,我想检查预处理器中的 gcc libstdc++ 版本,而不是检查__clang_major__
。
就我在这个编译器-资源管理器示例中看到的而言, __GNUC__
是在 clang 中定义的,但编译命令是
-g -o /tmp/compiler-explorer-compiler120120-1672-4ffux6.smufm/output.s -mllvm --x86-asm-syntax=intel -S --gcc-toolchain=/opt/compiler-explorer/gcc-8.3.0 -fcolor-diagnostics -fno-crash-diagnostics /tmp/compiler-explorer-compiler120120-1672-4ffux6.smufm/example.cpp
即 gcc 工具链来自 gcc 8.3.0,但__GNUC__
值为 4。
使用 clang 在预处理器中查询 gcc 工具链版本的好方法是什么? 理想情况下,一种以与 g++ 和 clang++ 兼容的方式检查 libstdc++ 版本的方法,这样如果首先检查编译器,我就不必编写意大利面。
在 gcc 9 的编译器头文件中查找^#.*define.*9
似乎是
#include <bits/c++config.h>
#if _GLIBCXX_RELEASE > 8
# include <execution>
#endif
可以胜任。 从这个一致性的角度来看,这个变量是在 gcc 7 的工具链中引入的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.