pattern and return a PACK_EXPANSION_*. The caller will need to
deal with that. */
if (TREE_CODE (t) == EXPR_PACK_EXPANSION)
- t = tsubst_expr (pattern, args, complain, in_decl,
+ result = tsubst_expr (pattern, args, complain, in_decl,
/*integral_constant_expression_p=*/false);
else
- t = tsubst (pattern, args, complain, in_decl);
- t = make_pack_expansion (t, complain);
- return t;
+ result = tsubst (pattern, args, complain, in_decl);
+ result = make_pack_expansion (result, complain);
+ if (PACK_EXPANSION_AUTO_P (t))
+ {
+ /* This is a fake auto... pack expansion created in add_capture with
+ _PACKS that don't appear in the pattern. Copy one over. */
+ packs = PACK_EXPANSION_PARAMETER_PACKS (t);
+ pack = retrieve_local_specialization (TREE_VALUE (packs));
+ gcc_checking_assert (DECL_PACK_P (pack));
+ PACK_EXPANSION_PARAMETER_PACKS (result)
+ = build_tree_list (NULL_TREE, pack);
+ PACK_EXPANSION_AUTO_P (result) = true;
+ }
+ return result;
}
gcc_assert (len >= 0);