Commit 1e2b90c4 by Jason Merrill Committed by Jason Merrill

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.

From-SVN: r258964
parent 8de4a674
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.
2018-03-27 Jason Merrill <jason@redhat.com>
......
......@@ -8497,6 +8497,22 @@ coerce_template_parms (tree parms,
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 ());
......
// 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment