1 // RUN: %clang_cc1 -std=c++20 -x c++ %s -verify -fsyntax-only 2 // expected-no-diagnostics 3 4 template <typename T0> 5 concept HasMemberBegin = requires(T0 t) { t.begin(); }; 6 7 struct GetBegin { 8 template <HasMemberBegin T1> 9 void operator()(T1); 10 }; 11 12 GetBegin begin; 13 14 template <typename T2> 15 concept Concept = requires(T2 t) { begin(t); }; 16 17 struct Subrange; 18 19 template <typename T3> 20 struct View { 21 Subrange &getSubrange(); 22 23 operator bool() 24 requires true; 25 operator boolView26 operator bool() 27 requires requires { begin(getSubrange()); }; 28 29 void begin(); 30 }; 31 32 struct Subrange : View<void> {}; 33 static_assert(Concept<Subrange>); 34