Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/concepts/template-template-parm1.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line source
// 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 }