使用 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.