:
template<typename T> concept C1 = sizeof(T) == 1;
template<typename T> concept C2 = C1<T>() && 1 == 2;
template<typename T> concept C3 = requires { typename T::type; };
template<typename T> concept C4 = requires (T x) { ++x; }
template<C2 U> void f1(U); template<C3 U> void f2(U); template<C4 U> void f3(U);
The associated constraints of #1 are
sizeof(T) == 1 (with mapping
T↦U)
∧ 1 == 2.
The associated constraints of #2 are
requires { typename T::type; } (with mapping
T↦U)
.
The associated constraints of #3 are
requires (T x) { ++x; } (with mapping
T↦U)
. —
end example