2 // { dg-options "-std=c++17 -fconcepts" }
8 template<typename T, template<typename...> class Sink>
9 struct copy_tuple_args_impl;
11 template<typename... Args, template<typename...> class Sink>
12 struct copy_tuple_args_impl<std::tuple<Args...>, Sink>
14 using type = Sink<Args...>;
18 // copy_tuple_args copies the template arguments of a tuple into another template
19 // copy_tuple_args does not care about constraints whatsoever.
20 template<typename Tuple, template<typename...> class Sink>
21 using copy_tuple_args = typename detail::copy_tuple_args_impl<Tuple, Sink>::type;
23 // A concept of a column
33 // column_list is constrained to Column arguments
39 // Here are some columns
53 using ColumnTuple = std::tuple<A, B>;
54 using ColumnList = copy_tuple_args<ColumnTuple, column_list>; // This fails, but should not