diff options
author | Jason Merrill <jason@redhat.com> | 2011-05-25 10:32:06 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-05-25 10:32:06 -0400 |
commit | bc7f13bf15c30ee57601c3ec0c8390cfc15e01db (patch) | |
tree | 6cab305912e008cc94baefa5399f51c30b447b08 /gcc/cp/pt.c | |
parent | 0dfef520f05214d7b199d0be09f55f511418b0e9 (diff) | |
download | gcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.zip gcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.tar.gz gcc-bc7f13bf15c30ee57601c3ec0c8390cfc15e01db.tar.bz2 |
re PR c++/48292 ([C++0x] "sorry, unimplemented: use of 'type_pack_expansion' in template")
PR c++/48292
* pt.c (tsubst_decl) [PARM_DECL]: Handle partial instantiation of
function parameter pack.
(tsubst_pack_expansion): Likewise.
From-SVN: r174201
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r-- | gcc/cp/pt.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index bd9aeba..fc84314 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8711,7 +8711,12 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain, have the wrong value for a recursive call. Just make a dummy decl, since it's only used for its type. */ arg_pack = tsubst_decl (parm_pack, args, complain); - arg_pack = make_fnparm_pack (arg_pack); + if (arg_pack && FUNCTION_PARAMETER_PACK_P (arg_pack)) + /* Partial instantiation of the parm_pack, we can't build + up an argument pack yet. */ + arg_pack = NULL_TREE; + else + arg_pack = make_fnparm_pack (arg_pack); } } else @@ -9801,14 +9806,14 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) if (DECL_TEMPLATE_PARM_P (t)) SET_DECL_TEMPLATE_PARM_P (r); - /* An argument of a function parameter pack is not a parameter - pack. */ - FUNCTION_PARAMETER_PACK_P (r) = false; - if (expanded_types) /* We're on the Ith parameter of the function parameter pack. */ { + /* An argument of a function parameter pack is not a parameter + pack. */ + FUNCTION_PARAMETER_PACK_P (r) = false; + /* Get the Ith type. */ type = TREE_VEC_ELT (expanded_types, i); |