template < typename T > requires Addable< T > T add( T const & x, T const & y ) { return x + y ; }これ以上に無いくらい簡単だ。必要なのは、コンセプトAddableを書くだけだ。どのように書けばいいのだろう。コンセプトの初心者は、次のように書くことだろう。
auto concept Addable < typename T > { T operator + ( T const &, T const & ) ; }しかしこのコードはコンパイルエラーになる。一体何が悪いというのか。それはadd関数が値を返しているからだ。値を返すには、コピーコンストラクタがなければならない。然るによって、コピーコンストラクタを明記してやらねばならない。一体何故コピーコンストラクタのようなトリビアルなものですら要求しなければならないのかといぶかる人がいるかもしれないが、すべての操作を要求しなければならないのだから、しかたがない。
auto concept Addable < typename T > { T::T( T const & ) ; T operator + ( T const &, T const & ) ; }http://cpplover.blogspot.com/2008/08/blog-post_18.html
この辺まではなんとか.
まだconcept_mapはわからない・・・構文がやばい.解説はどこだー.