// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s // expected-no-diagnostics template concept C = sizeof(T) <= sizeof(long); template struct A { template void f(U) requires C; void g() requires C; template void h(U) requires C; constexpr int i() requires C { return 0; } constexpr int i() requires C && true { return 1; } template<> void f(char); }; template<> template void A::f(U) requires C; template<> template void A::h(U) requires C; template<> template<> void A::f(int); template<> void A::g(); template<> constexpr int A::i() { return 2; } static_assert(A().i() == 2); template struct D { template static constexpr int f(U); template static constexpr int f(U) requires (sizeof(T) == 1); template<> constexpr int f(int) { return 1; } }; template<> template constexpr int D::f(U) requires (sizeof(signed char) == 1) { return 0; } static_assert(D::f(0) == 1); static_assert(D::f(0) == 1); static_assert(D::f(0) == 1); static_assert(D::f(0.0) == 0);