使用 GCC 6.1 检测概念 TS
Detecting the Concepts TS with GCC 6.1
如何使用 GCC 6.1 检测 Concepts TS 的存在?
This page 建议宏 __cpp_experimental_concepts
应该在 Concepts TS 支持的实现中预定义。但是,以下测试程序在带有 -fconcepts
标志的 GCC 6.1 上编译时没有错误:
#ifdef __cpp_experimental_concepts
static_assert(false, "Concepts TS found");
#endif
template <typename T>
concept bool Identity = true;
int main() {}
(我希望 static_assert
触发,或者 concept
关键字无法识别。)
有谁知道根据概念是否可用有条件地编译代码的任何其他方法?
GCC 的正确宏是 __cpp_concepts
:
#ifdef __cpp_concepts
static_assert(false, "Concepts TS found");
#endif
根据 this,宏的名称在最近的草稿中被更改。
正确的名字来自GCC support page (thanks to Jonathan Wakely), but the linked draft (2015-02-09) still requires __cpp_experimental_concepts
(which is strange... ). However, in this more recent draft (2015-09-25),实际名字已经改为__cpp_concepts
.
如何使用 GCC 6.1 检测 Concepts TS 的存在?
This page 建议宏 __cpp_experimental_concepts
应该在 Concepts TS 支持的实现中预定义。但是,以下测试程序在带有 -fconcepts
标志的 GCC 6.1 上编译时没有错误:
#ifdef __cpp_experimental_concepts
static_assert(false, "Concepts TS found");
#endif
template <typename T>
concept bool Identity = true;
int main() {}
(我希望 static_assert
触发,或者 concept
关键字无法识别。)
有谁知道根据概念是否可用有条件地编译代码的任何其他方法?
GCC 的正确宏是 __cpp_concepts
:
#ifdef __cpp_concepts
static_assert(false, "Concepts TS found");
#endif
根据 this,宏的名称在最近的草稿中被更改。
正确的名字来自GCC support page (thanks to Jonathan Wakely), but the linked draft (2015-02-09) still requires __cpp_experimental_concepts
(which is strange... ). However, in this more recent draft (2015-09-25),实际名字已经改为__cpp_concepts
.