template-declaration: template-head declaration template-head concept-definition
template-head: template < template-parameter-list > requires-clause
template-parameter-list: template-parameter template-parameter-list , template-parameter
requires-clause: requires constraint-logical-or-expression
constraint-logical-or-expression: constraint-logical-and-expression constraint-logical-or-expression || constraint-logical-and-expression
constraint-logical-and-expression: primary-expression constraint-logical-and-expression && primary-expression
template<class T> constexpr T pi = T(3.1415926535897932385L); template<class T> T circular_area(T r) { return pi<T> * r * r; } struct matrix_constants { template<class T> using pauli = hermitian_matrix<T, 2>; template<class T> constexpr static pauli<T> sigma1 = { { 0, 1 }, { 1, 0 } }; template<class T> constexpr static pauli<T> sigma2 = { { 0, -1i }, { 1i, 0 } }; template<class T> constexpr static pauli<T> sigma3 = { { 1, 0 }, { 0, -1 } }; };— end example
template<int N> requires N == sizeof new unsigned short int f(); // error: parentheses required around == expression— end example