Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/g++.dg/concepts/template-template-parm1.C @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | 1830386684a0 |
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 }