mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-24 16:30:53 +08:00
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:
parent
eb5bb0fd0b
commit
aeb459fbd1
@ -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.
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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>
|
||||
|
||||
|
24
gcc/testsuite/g++.dg/cpp0x/variadic105.C
Normal file
24
gcc/testsuite/g++.dg/cpp0x/variadic105.C
Normal 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 *-*-* } }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user