// RUN: %clang_cc1 -std=c++20 -verify %s // RUN: %clang_cc1 -std=c++23 -verify %s namespace PR52905 { template concept C = true; struct A { int begin(); int begin() const; }; template concept Beginable = requires (T t) { { t.begin } -> C; // expected-note@-1 {{because 't.begin' would be invalid: reference to non-static member function must be called}} }; static_assert(Beginable); // expected-error {{static assertion failed}} // expected-note@-1 {{does not satisfy 'Beginable'}} } // namespace PR52905 namespace PR52909a { template constexpr bool B = true; template concept True = B; template int foo(T t) requires requires { // expected-note {{candidate template ignored: constraints not satisfied}} {t.begin} -> True; // expected-note {{because 't.begin' would be invalid: reference to non-static member function must be called}} } {} struct A { int begin(); }; auto x = foo(A()); // expected-error {{no matching function for call to 'foo'}} } // namespace PR52909a namespace PR52909b { template concept True = true; template concept C = requires { { T::begin } -> True; // expected-note {{because 'T::begin' would be invalid: reference to overloaded function could not be resolved}} }; struct A { static void begin(int); static void begin(double); }; static_assert(C); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'A' does not satisfy 'C'}} } // namespace PR52909b namespace PR53075 { template concept True = true; template concept C = requires { { &T::f } -> True; // expected-note {{because '&T::f' would be invalid: reference to overloaded function could not be resolved}} }; struct S { int *f(); int *f() const; }; static_assert(C); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'S' does not satisfy 'C'}} } // namespace PR53075