コンセプト (C++)
コンセプトは以下のように定義される:
この例に含まれているキーワードautoは、コンセプトに記述された操作を提供するあらゆる型がコンセプトを満たすこととする、ということを示すものである。autoキーワードが無い場合、コンセプトを満たす型を宣言するのにコンセプトマップを使う必要がある。
このコンセプトは、「自身と同じ型の引数を二つ取り、boolを返す演算子 < を持つあらゆる型はLessThanComparableである」ということを示している。演算子は大域関数ではなく、型Tのメンバ関数でなくてはならない。
コンセプトは、複数の型を含むことも出来る。例えば、二つの型をとり、片方がもう片方の型へと変換できる、ということを表すコンセプトは:
これをテンプレートで使うためには、コンセプトの一般的使用の記法を使う必要がある:
コンセプトは複合できる。例えば、Regularというコンセプトが与えられている場合:
InputIteratorコンセプトに渡されたテンプレート引数の一つ目は、Regularコンセプトを満たすことが確認される。
継承を行うように、コンセプトも他のコンセプトから派生できる。そして、クラスの継承のように、派生コンセプトも基底コンセプトの要件を満たす。派生コンセプトは、クラスの派生のように定義される:
コンセプトに型名 (typename)を結び付けることもできる。これにより、型名が使用可能であることをコンセプトの要件として表現できる: