// PR c++/68828 | |
// { dg-do compile { target c++20 } } | |
template <typename... Types> | |
struct Var | |
{ | |
}; | |
struct A | |
{ | |
}; | |
template <typename T> | |
T | |
forward(T t) | |
{ | |
return static_cast<T>(t); | |
} | |
template <typename V, typename... Types, typename... Args> | |
bool requires_types_args(V&& v, Var<Types...>&, Args&&... args) | |
{ | |
return (true && ... && | |
requires (V&& v, Types type, Args... args) { | |
foo(forward<V>(v), forward<Types>(type), | |
forward<Args>(args)...); | |
} | |
); | |
} | |
void bar() | |
{ | |
Var<int, char> v; | |
requires_types_args(A(), v, 1, 'b'); | |
} |