+2018-03-29 Jason Merrill <jason@redhat.com>
+
+ PR c++/85093 - too many template args with pack expansion.
+ * pt.c (coerce_template_parms): Keep pack expansion args that will
+ need to be empty.
+
2018-03-29 Jason Merrill <jason@redhat.com>
* pt.c (build_non_dependent_expr): Propagate expr location.
goto bad_nargs;
}
+ if (arg_idx < nargs)
+ {
+ /* We had some pack expansion arguments that will only work if the packs
+ are empty, but wait until instantiation time to complain.
+ See variadic-ttp3.C. */
+ int len = nparms + (nargs - arg_idx);
+ tree args = make_tree_vec (len);
+ int i = 0;
+ for (; i < nparms; ++i)
+ TREE_VEC_ELT (args, i) = TREE_VEC_ELT (new_inner_args, i);
+ for (; i < len; ++i, ++arg_idx)
+ TREE_VEC_ELT (args, i) = TREE_VEC_ELT (inner_args,
+ arg_idx - pack_adjust);
+ new_inner_args = args;
+ }
+
if (lost)
{
gcc_assert (!(complain & tf_error) || seen_error ());
--- /dev/null
+// PR c++/85093
+// { dg-do compile { target c++11 } }
+
+template<class V> class A {};
+
+template<class V, class... G> class B {
+ typedef A<V,G...> AB; // { dg-error "arguments" }
+ AB ab;
+};
+
+int main() {
+ B<int,double> b;
+}