// RUN: %clang_cc1 -fsyntax-only -std=c++2b %s -verify // expected-no-diagnostics template struct Wrap : Base { }; struct S { constexpr int f(this const S&) { return 42; } constexpr int f(this const S&, auto&&... args) { return (args + ... + 0); } constexpr int operator[](this const S&) { return 42; } constexpr int operator[](this const S& self, int i) { return i + self.base; } constexpr int operator()(this const S&) { return 42; } constexpr int operator()(this const S& self, int i) { return self.base + i; } constexpr bool operator==(this const S& self, auto && test) { return self.base == test; }; constexpr int operator*(this const S& self) { return self.base + 22; }; constexpr operator Wrap (this const S& self) { return Wrap{self}; }; constexpr int operator <<(this Wrap self, int i) { return self.base+i; } int base = 20; }; consteval void test() { constexpr S s; static_assert(s.f() == 42); static_assert(s[] == 42); static_assert(s[22] == 42); static_assert(s.f() == 42); static_assert(s() == 42); static_assert(s(22) == 42); static_assert(s == 20); static_assert(s != 0); static_assert(*s == 42); static_assert((s << 11) == 31); } namespace GH68070 { constexpr auto f = [x = 3](this Self&& self) { return x; }; auto g = [x = 3](this Self&& self) { return x; }; int test() { constexpr int a = f(); static_assert(a == 3); return f() + g(); } }