gcc/c-family/ * c.opt (-fnew-ttp-matching): New flag. * c-opts.c (c_common_post_options): Default on if -std=c++1z. gcc/cp/ * pt.c (coerce_template_template_parms): Allow a template argument that's less specialized than the parameter. (unify_bound_ttp_args): Adjust parm's args to apply to arg's template. (coerce_template_args_for_ttp): Split out from lookup_template_class_1. (coerce_ttp_args_for_tta, store_defaulted_ttp) (lookup_defaulted_ttp, add_defaults_to_ttp): New. (process_partial_specialization): Set DECL_CONTEXT of template template-parameters. (coerce_template_parms): Only inform when complain. (expand_template_argument_pack): Handle error_mark_node. (convert_template_argument, template_args_equal, unify): Handle any_targ_node. * cp-tree.h (enum cp_tree_index): Add CPTI_ANY_TARG. (any_targ_node): New. * decl.c (cxx_init_decl_processing): Set it. * name-lookup.c (consider_binding_level): Ignore names with embedded spaces. From-SVN: r243871
11 lines
334 B
C
11 lines
334 B
C
// PR c++/32565
|
|
// { dg-do compile { target c++11 } }
|
|
// { dg-options -fno-new-ttp-matching }
|
|
|
|
template<typename...> struct A1;
|
|
template<template<int, int...> class T> struct A1<T<0, 1> > {};
|
|
template<int, int, int...> struct B1 {};
|
|
A1<B1<0, 1> > a1;
|
|
template<int...> struct B2 {};
|
|
A1<B2<0, 1> > a2; // { dg-error "incomplete type" }
|