| // PR c++/103783 |
| // { dg-do compile { target c++20 } } |
| |
| template<bool B> |
| struct A { |
| template<class...> void f1() = delete; |
| template<class...> static void f1() requires B; |
| |
| template<class...> void f2() requires B; |
| template<class...> static void f2() = delete; |
| |
| void g1() = delete; |
| static void g1() requires B; |
| |
| void g2() requires B; |
| static void g2() = delete; |
| }; |
| |
| int main() { |
| A<true> a; |
| a.f1(); // OK |
| a.f2(); // OK |
| a.g1(); // OK, previously rejected as ambiguous |
| a.g2(); // OK, previously rejected as ambiguous |
| } |