Mercurial > hg > CbC > CbC_llvm
view clang/test/SemaTemplate/pr52909.cpp @ 266:00f31e85ec16 default tip
Added tag current for changeset 31d058e83c98
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 14 Oct 2023 10:13:55 +0900 |
parents | 1f2b6ac9f198 |
children |
line wrap: on
line source
// RUN: %clang_cc1 -std=c++20 -verify %s // RUN: %clang_cc1 -std=c++23 -verify %s namespace PR52905 { template <class> concept C = true; struct A { int begin(); int begin() const; }; template <class T> 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<A>); // expected-error {{static assertion failed}} // expected-note@-1 {{does not satisfy 'Beginable'}} } // namespace PR52905 namespace PR52909a { template<class> constexpr bool B = true; template<class T> concept True = B<T>; template <class T> 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<class> concept True = true; template<class T> 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<A>); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'A' does not satisfy 'C'}} } // namespace PR52909b namespace PR53075 { template<class> concept True = true; template<class T> 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<S>); // expected-error {{static assertion failed}} // expected-note@-1 {{because 'S' does not satisfy 'C'}} } // namespace PR53075