Согласно cppreference , g cc 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__
я бы хотел проверить версию g cc 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
, т. Е. Набор инструментов g cc относится к g cc 8.3.0, но значение __GNUC__
равно 4.
Какой хороший способ запросить версию набора инструментов g cc в препроцессоре с помощью clang? В идеале это способ проверки версии libstdc ++ способом, совместимым для g ++ и clang ++, так что мне не нужно писать спагетти, если сначала проверяется компилятор.