// RUN: %clang_cc1 -std=c++23 -verify -fsyntax-only %s // This test case came up in the review of // https://reviews.llvm.org/D159126 // when transforming `this` within a // requires expression, we need to make sure // the type of this (and its qualifiers) is respected. // expected-no-diagnostics namespace D159126 { template concept __member_begin = requires(_Tp __t) { __t.begin(); }; struct { template requires __member_begin<_Tp> auto operator()(_Tp &&) {} } inline begin; template concept range = requires { begin; }; template concept __can_compare_begin = requires(_Tp __t) { begin(__t); }; struct { template <__can_compare_begin _Tp> void operator()(_Tp &&); } empty; template struct owning_view { _Rp __r_; public: void empty() const requires requires { empty(__r_); }; }; template concept HasEmpty = requires(T t) { t.empty(); }; struct ComparableIters { void begin(); }; static_assert(HasEmpty>); static_assert(HasEmpty>); static_assert(!HasEmpty>); static_assert(!HasEmpty>); }