C++20 コンセプトのサポート
概念は、 C++20 標準の主要な言語機能の 1 つです。 これらは、テンプレート引数にコンパイル時の制約を課す方法を提供し、テンプレートが期待に応えることを保証できます。
概念サポートの構成
1。 コンパイラーを設定する
使用しているコンパイラーは、C++20 Concepts 機能をサポートしている必要があります。
Clang10 以降を使用してください。 Clang での C++ サポート(英語)で特定の C++20 フィーチャーのステータスを確認できます。
GCC 10(英語) 以降を使用してください。 GCC10 での Concepts の実装は完全に C++20 に準拠(英語)です。
MSVC は、Visual Studio バージョン 16.3 以降のコンセプトをサポートしています。 簡潔な構文(
void fn(MyConcept auto mc))はまだサポートされていないことに注意してください。正しく解決するには、
#define __cpp_lib_conceptsの追加が必要になる場合があります(マイクロソフト発表(英語)へのコメントを参照)。
2。 プロジェクト標準を C++20 に設定する
CMake プロジェクト
新しいプロジェクトを作成するときは、「新規プロジェクト」ウィザードの「言語標準 」フィールドで「C++20 」を選択します。
既存のプロジェクトの場合、 CMakeLists.txt の先頭に
CMAKE_CXX_STANDARD変数を設定します。set(CMAKE_CXX_STANDARD 20)
Makefile プロジェクト
Makefile で CXXFLAGS 変数を設定します。
中間子プロジェクト
cpp_std コンパイラーオプションを設定します。
3。 Clangd 補完が有効になっていることを確認する
デフォルトでは、CLion のコード補完は Clangd ベースのエンジンによって実行されます。 コンセプトを使用する場合は、デフォルトのオプション Clangd のみ完了 を使用するか、 Clangd の補完が組み込みに統合されました に切り替えます。
に進みます。
コード補完 セクションで、 clangd でコード補完を利用する チェックボックスを設定します:

概念のコードインサイト
解析とハイライト
CLion は、 concept および requires のすべての標準構文形式を解析してハイライトします。

の概念のハイライト設定を調整できます。 デフォルトでは、スキームは C/C++ Class/struct/enum/union から継承されます。

コード解析
クイックフィックス付きのインスペクションのセットは、Concepts を使用してコードで使用できます。
インスペクションのうち、一部のチェックはコンパイラーから行われます。

制約のない変数型 インスペクションは、制約された式または関数呼び出しの結果が代入される場合、 auto として宣言されたローカル変数を制約することを提案します。 このインスペクションは、Windows ではデフォルトで無効になっています。

コード補完、ナビゲーションリファクタリング
コード補完 for Concepts は、次の場合に使用できます。
制約されているテンプレート型パラメーターの補完:

std::is_base_of<MyBase, T>およびstd::is_same<Other, T>によって制約されたタイプの補完。std::is_base_of<MyBase, T>およびstd::is_same<Other, T>のTに関する提案のリストには、それぞれMyBaseおよびその他のオプションが含まれています。
この場合の補完は、
MyBaseおよびその他が具象型(テンプレート型ではない)の場合にのみ機能することに注意してください。
Rename リファクタリングや Go to Definition、 Find Usages などのナビゲーションアクションも、Concepts を利用したコードでサポートされています。