Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/concepts/template-template-parm1.C @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children | 1830386684a0 |
line wrap: on
line source
// PR c++/66937 // { dg-do compile { target c++17 } } // { 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 }