| // PR c++/92103 | |
| // { dg-do compile { target c++20 } } | |
| template<int M> | |
| struct traits | |
| { | |
| template<int N> | |
| struct equal_to | |
| { static constexpr bool value = false; }; | |
| template<int N> requires (M == N) | |
| struct equal_to<N> | |
| { static constexpr bool value = true; }; | |
| template<int N> requires (M < 0) || (N < 0) | |
| struct equal_to<N> | |
| { }; | |
| }; | |
| static_assert(traits<0>::equal_to<0>::value); | |
| static_assert(!traits<0>::equal_to<1>::value); | |
| static_assert(traits<-1>::equal_to<0>::value); // { dg-error "not a member" } |