]> gcc.gnu.org Git - gcc.git/blobdiff - gcc/cp/pt.c
c++: lambda pack init-capture within generic lambda
[gcc.git] / gcc / cp / pt.c
index 7956e83c1de414d4e9054869438907f5784e67fb..524a16ab0c6602624b1f51abd067d36947ad7ed1 100644 (file)
@@ -13114,12 +13114,23 @@ tsubst_pack_expansion (tree t, tree args, tsubst_flags_t complain,
         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);
This page took 0.050076 seconds and 5 git commands to generate.