[temp.concept] (original) (raw)

13 Templates [temp]

13.7 Template declarations [temp.decls]

13.7.9 Concept definitions [temp.concept]

A concept is a template that defines constraints on its template arguments.

A concept-definitiondeclares a concept.

Its identifier becomes a concept-namereferring to that concept within its scope.

[Example 1: template<typename T> concept C = requires(T x) { { x == x } -> std::convertible_to<bool>;};template<typename T> requires C<T>T f1(T x) { return x; } template<C T>T f2(T x) { return x; } — _end example_]

[Note 1:

A concept-id ([temp.names]) is evaluated as an expression.

— _end note_]

The first declared template parameter of a concept definition is itsprototype parameter.