| // Verify we check return-type-requirements by passing the entire set of | |
| // template arguments to normalization rather than first substituting into | |
| // the constraint. The latter approach would induce a substitution failure and | |
| // cause the requires-expression to evaluate to false here. | |
| // { dg-do compile { target c++20 } } | |
| template <class, class> | |
| concept C1 = true; | |
| template <class T> | |
| concept C2 = requires { { 0 } -> C1<typename T::type>; }; | |
| static_assert(C2<int>); |