1

GCC 6.1 でコンセプト TS の存在を検出するにはどうすればよいですか?

このページ__cpp_experimental_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キーワードが認識されなくなることを期待します。)

コンセプトが利用可能かどうかに基づいてコードを条件付きでコンパイルする他の方法を知っている人はいますか?

4

1 に答える 1

4

正しいマクロは__cpp_conceptsGCC 用です。

#ifdef __cpp_concepts
static_assert(false, "Concepts TS found");
#endif

これによると、マクロの名前は最近のドラフトで変更されました。

正しい名前はGCC サポート ページ( Jonathan Wakelyに感謝) からのものですが、リンクされたドラフト(2015-02-09) にはまだ必要__cpp_experimental_conceptsです (これは奇妙です...)。ただし、この最新のドラフト(2015-09-25) では、実際には名前が に変更されてい__cpp_conceptsます。

于 2016-07-20T11:18:22.870 に答える