| // PR c++/67152 | |
| // { dg-do compile { target c++20 } } | |
| template <class T> | |
| concept HasType = requires { typename T::type; }; | |
| template<class T> | |
| struct trait { | |
| using type = void; | |
| }; | |
| struct has_type { using type = void; }; | |
| // Instantiation here | |
| trait<has_type>::type foo() {} | |
| // constrained version here. Type "has_type" would fail this | |
| // constraint so this partial specialization would not have been | |
| // selected. | |
| template<class T> | |
| requires (!HasType<T>) | |
| struct trait<T> { | |
| using type = void; | |
| }; |