To form CI′′,
each appearance of C's template parameters in
the parameter mappings of the atomic constraints
(including concept-dependent constraints)
in CI′
is substituted with their respective arguments from
the parameter mapping of CD and the arguments of CI.
Checking whether CI′′ is satisfied
can lead to further normalization of concept-dependent constraints.
— end note]
[Example 1: template<typename>concept C =true;
template<typename T, template<typename>concept CC>concept D = CC<T>;
template<typename T,
template<typename>concept CT,
template<typename, template<typename>concept>concept CU>int f()requires CU<T, CT>;
int _ = f<int, C, D>();
In this example, the associated constraint of f
is a concept-dependent constraint CI
whose expression is the concept-id CU<T, CT> with the mapping
T↦T,CT↦CT,CU↦CU.