// RUN: %clang_cc1 -std=c++2a -x c++ %s -verify template concept C1 = sizeof(U) >= 4; // sizeof(U) >= 4 [U = U (decltype(T))] template concept C2 = C1; // sizeof(U) >= 4 [U = V (decltype(Y{}))] template constexpr int foo() requires C2 { return 1; } // sizeof(U) >= 4 [U = W (decltype(int{}))] template // expected-note@+1{{candidate function}} constexpr int foo() requires C1<1, X> && true { return 2; } // sizeof(U) >= 4 [U = X (decltype(1))] static_assert(foo<'a'>() == 2); template // expected-note@+1{{candidate function}} constexpr int foo() requires C2 && true { return 3; } // sizeof(U) >= 4 [U = Z (decltype(long long{}))] static_assert(foo<'a'>() == 3); // expected-error@-1{{call to 'foo' is ambiguous}}