[
Example 1:
template<typename>
concept C = true;
template<typename T, template<typename> concept CC>
concept D = CC<T>;
template<typename U,
template<typename> concept CT,
template<typename, template<typename> concept> concept CU>
int f() requires CU<U, CT>;
int i = f<int, C, D>();
In this example, the associated constraints of
f
consist of a concept-dependent constraint
whose expression is the concept-id
CU<U, CT> with the mapping
U↦U,CT↦CT,CU↦CU. The result of substituting
D into this expression is
D<U, CT>. We consider the normal form of the resulting concept-id,
which is
CC<T> with the mapping
T↦U,CC↦CT. By recursion,
C is substituted into
CC<T>, and the result
is normalized to the atomic constraint
true, which is satisfied
. —
end example]