On Sun, Dec 27, 2015 at 12:02 PM, Patrick Palka <patr...@parcs.ath.cx> wrote: > In try_one_overload(), it should not be a deduction failure if we > deduced more arguments of an argument pack than were explicitly > specified (as long as the arguments are otherwise equivalent). > > This patch makes try_one_overload() manually check the argument packs, > to permit such a case. > > Bootstrap + regtest in progress on x86_64-pc-linux-gnu, will also test > against Boost. Is this OK to commit if testing succeeds? > > gcc/cp/ChangeLog: > > PR c++/69052 > * pt.c (try_one_overload): Handle comparing argument packs so > that there is no conflict if we deduced more arguments of an > argument pack than were explicitly specified. > > gcc/testsuite/ChangeLog: > > PR c++/69052 > g++.dg/cpp0x/pr69056.C: New test. > --- > gcc/cp/pt.c | 21 +++++++++++++++++++++ > gcc/testsuite/g++.dg/cpp0x/pr69056.C | 30 ++++++++++++++++++++++++++++++ > 2 files changed, 51 insertions(+) > create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr69056.C > > diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c > index ff16b7c..cdbfadd 100644 > --- a/gcc/cp/pt.c > +++ b/gcc/cp/pt.c > @@ -18694,6 +18694,27 @@ try_one_overload (tree tparms, > template args used in the function parm list with our own > template parms. Discard them. */ > TREE_VEC_ELT (tempargs, i) = NULL_TREE; > + else if (oldelt && ARGUMENT_PACK_P (oldelt)) > + { > + /* Check that the deduced argument at each index is equivalent to > the > + corresponding explicit argument. We may have deduced more > + arguments than were explicitly specified, and that's OK. */
Oops, I forgot to --amend a clarity change to the above comment. It should read: /* Check that the argument at each index of the deduced argument pack is equivalent to the corresponding explicitly specified argument. We may have deduced more arguments than were explicitly specified, and that's OK. */