re PR c++/47289 ([C++0x] ICE in tsubst_pack_expansion (triggered by decltype))

PR c++/47289
	* pt.c (coerce_template_parms): Fix error recovery.

From-SVN: r168822
This commit is contained in:
Jason Merrill 2011-01-14 16:26:47 -05:00 committed by Jason Merrill
parent eb5bb0fd0b
commit aeb459fbd1
4 changed files with 33 additions and 2 deletions

View File

@ -1,5 +1,8 @@
2011-01-14 Jason Merrill <jason@redhat.com>
PR c++/47289
* pt.c (coerce_template_parms): Fix error recovery.
PR c++/46903
* typeck2.c (check_narrowing): Only check arithmetic types.

View File

@ -6410,7 +6410,7 @@ coerce_template_parms (tree parms,
sorry ("cannot expand %<%T%> into a fixed-length "
"argument list", arg);
}
return error_mark_node;
++lost;
}
}
else if (require_all_args)
@ -6438,7 +6438,7 @@ coerce_template_parms (tree parms,
reported) that we are trying to recover from, e.g., a class
template with a parameter list such as
template<typename..., typename>. */
return error_mark_node;
++lost;
else
arg = convert_template_argument (TREE_VALUE (parm),
arg, new_args, complain,

View File

@ -1,3 +1,7 @@
2011-01-14 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/variadic105.C: New.
2011-01-08 Dominique d'Humieres <dominiq@lps.ens.fr>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>

View File

@ -0,0 +1,24 @@
// PR c++/47289
// { dg-options -std=c++0x }
// { dg-prune-output "note" }
template <template <typename... __ARGS> class _F, typename... _ARGS>
auto reverse (_ARGS... args) -> decltype(_F<_ARGS...>::call_function(args...)) {
return _F<_ARGS...>::call_function(args...);
}
template <typename _T>
_T sum(_T x) { return x; }
template <typename _T, typename... _ARGS>
_T sum(_T x, _ARGS... args) { return x + sum(args...); }
template <typename _T, typename... _ARGS>
struct call_sum {
static _T call_function(_T x1, _ARGS... args) { return sum(x1, args...); }
};
int main() {
// This shouldn't be an error; this is bug 35722.
reverse<call_sum>(1,2); // { dg-bogus "no match" "" { xfail *-*-* } }
}