// RUN: %clang_cc1 -std=c++2a -frelaxed-template-template-args -verify %s template concept C = T::f(); // #C template concept D = C && T::g(); template concept F = T::f(); // #F template class P> struct S1 { }; // #S1 template struct X { }; template struct Y { }; // #Y template struct Z { }; template struct W { }; // #W S1 s11; S1 s12; // expected-error@-1 {{template template argument 'Y' is more constrained than template template parameter 'P'}} // expected-note@#S1 {{'P' declared here}} // expected-note@#Y {{'Y' declared here}} S1 s13; S1 s14; // expected-error@-1 {{template template argument 'W' is more constrained than template template parameter 'P'}} // expected-note@#S1 {{'P' declared here}} // expected-note@#W {{'W' declared here}} // expected-note@#F 1-2{{similar constraint expressions not considered equivalent}} // expected-note@#C 1-2{{similar constraint}} template class P> struct S2 { }; S2 s21; S2 s22; S2 s23; template