// 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'); }