根据优先选择的说法,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。所以,我不想检查__clang_major__,而是检查预处理程序中的gcc libstdc++版本。
就我所见的在这个编译器-资源管理器示例中而言,__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工具链版本的好方法是什么?理想情况下,检查libstdc++版本的方式与g++和clang++兼容,这样如果首先检查编译器,我就不会编写意大利面。
发布于 2020-02-20 11:36:09
在gcc 9的编译器头中加入^#.*define.*9似乎是
#include <bits/c++config.h>
#if _GLIBCXX_RELEASE > 8
# include <execution>
#endif能做好这份工作。在这个一致性视图中,这个变量是用gcc 7的工具链引入的。
https://stackoverflow.com/questions/60318611
复制相似问题