The normal form of a concept-id C<A1, A2, ..., An>
is the normal form of the constraint-expression of C,
after substituting A1, A2, ..., An for
C's respective template parameters in the
parameter mappings in each atomic constraint.
If any such substitution results in an invalid type or expression,
the program is ill-formed; no diagnostic is required.
[Example 1: template<typename T>concept A = T::value ||true;
template<typename U>concept B = A<U*>;
template<typename V>concept C = B<V&>;
Normalization of B's constraint-expression
is valid and results in
T::value (with the mapping T↦U*)
∨true (with an empty mapping),
despite the expression T::value being ill-formed
for a pointer type T.
Normalization of C's constraint-expression
results in the program being ill-formed,
because it would form the invalid type V&*
in the parameter mapping.