:
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. —
end example