I am confused why following code all reject by gcc, edg and msvc. #2 is more constrained than #1 due to E subsumes D.
template <typename> constexpr bool True = true;
template <typename T> concept C = True<T>;
template <typename T> concept D = C<T> && sizeof(T) > 2;
template <typename T> concept E = D<T> && alignof(T) > 1;
template<C auto I>
struct Y3 { Y3()=delete; };
template<D auto I>
struct Y3<I> { }; #1
template<E auto I>
struct Y3<I> {}; #2
void f() {
Y3<1> c;
}
I tested with -std=c++20.