そして、このコンセプトの要求を満たさなければならないクラス/関数を定義する
template <LessThanComparable T> const T& min(const T& lhs, const T& rhs) { return lhs < rhs ? lhs : rhs; }こうしてもいい(こっちの書き方だと、コンセプトを&&で複数指定できる)
template <class T> requires LessThanComparable<T> const T& min(const T& lhs, const T& rhs) { return lhs < rhs ? lhs : rhs; }http://d.hatena.ne.jp/faith_and_brave/20071005/1191579496
上の方はclass|typenameがコンセプトになった形だからとてもわかりやすいのだけど,下の書き方はどうも馴染まない.どうしてかというと;
requires LessThanComparable
型Tが持っていなければならないいくつかの特性について言及するのだからTを1回だけ書きたい.
requires T : LessThanComparable
こうすると複数のコンセプトを書きやすいのになと思う.
requires T : LessThanComparable, FooConcept, BarConcept
requires 絡みの他の機能をまだ知らないからこれでも本当に大丈夫なのかはこれから判断する.
追記
template <class T : LessThanComparable, FooConcept, BarConcept> const T& min(const T& lhs, const T& rhs) { ... }
これでもいいかな?
追記
そうか.
template <class T, class U> requires FooConcept<T,U> void fun(){}
こういうのがあるからか.