aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/pt.c
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2009-06-30 15:36:36 -0400
committerJason Merrill <jason@gcc.gnu.org>2009-06-30 15:36:36 -0400
commit0db906f1851bacdb1b429ba5a6f501282fdf7a63 (patch)
treeb5f4bc18d51739a52763e76b30d0bf6ddbd1305c /gcc/cp/pt.c
parent342f368cd9927a2929ab3d8d5bddfef625f520bc (diff)
downloadgcc-0db906f1851bacdb1b429ba5a6f501282fdf7a63.zip
gcc-0db906f1851bacdb1b429ba5a6f501282fdf7a63.tar.gz
gcc-0db906f1851bacdb1b429ba5a6f501282fdf7a63.tar.bz2
re PR c++/40595 ([C++0x] ICE trying to use sfinae with variadic template pack expansion)
PR c++/40595 * pt.c (tsubst_pack_expansion): Handle unexpanded packs in an EXPR_PACK_EXPANSION. From-SVN: r149117
Diffstat (limited to 'gcc/cp/pt.c')
-rw-r--r--gcc/cp/pt.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index e0a413b..b7c309d 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -7630,8 +7630,15 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
and return a PACK_EXPANSION_*. The caller will need to deal with
that. */
if (unsubstituted_packs)
- return make_pack_expansion (tsubst (pattern, args, complain,
- in_decl));
+ {
+ tree new_pat;
+ if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
+ new_pat = tsubst_expr (pattern, args, complain, in_decl,
+ /*integral_constant_expression_p=*/false);
+ else
+ new_pat = tsubst (pattern, args, complain, in_decl);
+ return make_pack_expansion (new_pat);
+ }
/* We could not find any argument packs that work. */
if (len < 0)