constraints)」という。制約単体、もしくは&&と||を含まない定数条件式が原子制約となるrequires節は、非テンプレートの関数宣言にも記述できる。}のようにパラメータの型としてautoを使用することで関数テンプレートとして関数呼び出し演算子が定義され、それぞれの変数にテンプレートパラメータが割り振られていたコンセプトの導入にともない、この仕様を以下のように拡大する:ラムダ式以外の通常の関数もまたパラメータ型autoとすることで関数テンプレートを定義できるようにする関数の戻り値型として使用するauto、変数定義のauto、パラメータ型のautoをコンセプトで制約できるようにする構文を追加するautoパラメータによる関数テンプレートの簡易定義パラメータ型をautoにすることにより、それぞれのパラメータにテンプレートパラメータが振り分けられる。変数定義のauto、関数パラメータのauto、戻り値型のautoをそれぞれ制約できる。class)この機能が必要になった背景・経緯コンセプトは最初、テンプレートを使用した際のコンパイルエラーメッセージを読みやすいものにするため設計された。テンプレートは定義に使用された機能がそれぞれインスタンス化されるまで、型パラメータにその操作が適用できるかどうかわからない。そのため、テンプレートを使用したプログラムは、使い方を間違えたときに問題を解析しにくいエラーメッセージを出力した。この問題を解決する方法として考えられたのが、テンプレートパラメータを制約するというものだ。定義ではなく宣言の段階でテンプレートパラメータが満たすべき要件を指定できるようにすることで、早い段階で型パラメータに適用できない操作を検出し、読みやすいエラーメッセージを出力できる。C++11を策定する際、大きな目玉機能としてコンセプトの導入が予定されていた。コンセプトで制約した機能以外はテンプレート内で使用できない。コンセプトにも継承相当の機能を導入し、あるコンセプトをベースにして新たなコンセプトを定義するもの。