I don't know whether this question has been raised or not, but I wonder if it's possible to declare and use the following:
template <class T>
concept bool has_type = requires (typename T::type t) { /*other requirements*/ };
In existing gcc implementation (from trunk) a constraint defined by this concept satisfies even if T doesn't have nested type.
According to N4553, 14.10.1.8.2,
A parameterized constraint is satisfied if and only if substitution into the types of its constraint
variables does not result in an invalid type, and its operand is satisfied.
so it shouldn't satisfy.
Is it bug in current implementation in GCC or am I getting something wrong?
Thanks!