// { dg-do compile { target c++20 } } | |
// { dg-additional-options "-fconcepts-ts" } | |
template<class T> | |
concept bool C = requires(const T& t) { t.foo(); }; | |
template<class T> | |
struct Base | |
{ | |
constexpr T const& derived() const | |
{ | |
return static_cast<T const&>(*this); | |
} | |
constexpr bool bar() const | |
requires requires(const T& t) { t.foo(); } | |
{ | |
derived().foo(); | |
return true; | |
} | |
}; | |
template<class T> | |
struct Derived : Base<Derived<T>> | |
{ | |
constexpr void foo() const {} | |
}; | |
int main() | |
{ | |
static_assert(Derived<int>{}.bar()); | |
} | |