Commit aeb459fb by Jason Merrill Committed by Jason Merrill

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
parent eb5bb0fd
2011-01-14 Jason Merrill <jason@redhat.com> 2011-01-14 Jason Merrill <jason@redhat.com>
PR c++/47289
* pt.c (coerce_template_parms): Fix error recovery.
PR c++/46903 PR c++/46903
* typeck2.c (check_narrowing): Only check arithmetic types. * typeck2.c (check_narrowing): Only check arithmetic types.
......
...@@ -6410,7 +6410,7 @@ coerce_template_parms (tree parms, ...@@ -6410,7 +6410,7 @@ coerce_template_parms (tree parms,
sorry ("cannot expand %<%T%> into a fixed-length " sorry ("cannot expand %<%T%> into a fixed-length "
"argument list", arg); "argument list", arg);
} }
return error_mark_node; ++lost;
} }
} }
else if (require_all_args) else if (require_all_args)
...@@ -6438,7 +6438,7 @@ coerce_template_parms (tree parms, ...@@ -6438,7 +6438,7 @@ coerce_template_parms (tree parms,
reported) that we are trying to recover from, e.g., a class reported) that we are trying to recover from, e.g., a class
template with a parameter list such as template with a parameter list such as
template<typename..., typename>. */ template<typename..., typename>. */
return error_mark_node; ++lost;
else else
arg = convert_template_argument (TREE_VALUE (parm), arg = convert_template_argument (TREE_VALUE (parm),
arg, new_args, complain, arg, new_args, complain,
......
2011-01-14 Jason Merrill <jason@redhat.com>
* g++.dg/cpp0x/variadic105.C: New.
2011-01-08 Dominique d'Humieres <dominiq@lps.ens.fr> 2011-01-08 Dominique d'Humieres <dominiq@lps.ens.fr>
Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
......
// 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 *-*-* } }
}
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