// PR c++/66937
// { dg-do compile { target c++17_only } }
// { dg-options "-fconcepts" }

#include <tuple>

namespace detail
{
  template<typename T, template<typename...> class Sink>
  struct copy_tuple_args_impl;

  template<typename... Args, template<typename...> class Sink>
  struct copy_tuple_args_impl<std::tuple<Args...>, Sink>
  {
    using type = Sink<Args...>;
  };
}

// copy_tuple_args copies the template arguments of a tuple into another template
// copy_tuple_args does not care about constraints whatsoever.
template<typename Tuple, template<typename...> class Sink>
using copy_tuple_args = typename detail::copy_tuple_args_impl<Tuple, Sink>::type;

// A concept of a column
template <typename T>
concept bool Column()
{
  return requires()
    {
      typename T::_name_t;
    };
}

// column_list is constrained to Column arguments
template<Column... C>
struct column_list
{
};

// Here are some columns
struct A
{
  using _name_t = int;
};

struct B
{
  using _name_t = int;
};


int main()
{
  using ColumnTuple = std::tuple<A, B>;
  using ColumnList = copy_tuple_args<ColumnTuple, column_list>; // This fails, but should not
}

