C++のConcept
エラーメッセージの質の改善につながる
テンプレートを必要とするインターフェースを持っていない型を用いるときにコンパイラによって吐かれるエラーの量が膨大で、かつ指摘する場所が離れすぎていて理解し辛いものになっている
期待した式が有効でない場合コンパイルエラーとする機能
concept同士の入れ子や、論理演算もできる
「最低の条件を満たす型」を定義する
C++template<typename T>
concept bool Multipliable = // コンセプト
requires (T a, T b) {
a * b;
}; // requires式
1行目の template<typename T>
で「あらゆる型T」を宣言
2行目の concept
から、この型Tが満たすべき式を列挙していく
上の例では、T型の2変数a,bが a * b
を行えることが条件になる
これらの変数は具体的な値でないため、 a == 0
のような条件は書けない
requires
を使わずとも使える
cpptemplate<typename T> concept bool SmallerDouble = sizeof(T) < sizeof(double);
この例では右辺の型Tがdouble型よりも小さいか(?)が条件になる
使用例
C++auto square(Multipliable i) { // コンセプトを用いた関数宣言
return i * i;
}
そのconceptを引数の型などに設定して定義することで、「そのコンセプトを満たすあらゆる型」を取ることを表現できる
参考