<div dir="ltr">Thanks, I've posted this as Issue 250925.1:<div><br></div><div><a href="https://dwarfstd.org/issues/250925.1.html">https://dwarfstd.org/issues/250925.1.html</a></div><div><br></div><div>-cary</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Thu, Sep 25, 2025 at 7:04 AM Michael Buch via Dwarf-discuss <<a href="mailto:dwarf-discuss@lists.dwarfstd.org">dwarf-discuss@lists.dwarfstd.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Synopsis</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">=======</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">This proposal is a follow-up to <span style="font-family:HelveticaNeue;font-size:small;color:rgb(0,0,0)">Issue 250516.1: Support C++0x Variadic templates </span><span style="color:rgb(0,0,0)">[1] to support variadic lambda captures and variadic structured binding declarations [2].</span></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Motivation </div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">========</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal;min-height:15px"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">DWARFv6 is scheduled to support two new tags to encode parameter packs (motivated by the C++ feature of the same name) [1]: DW_TAG_template_parameter_pack and DW_TAG_formal_parameter_pack. These tags allow producers to represent template parameter packs and function argument packs respectively.</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">With C++20, parameter packs can be used in lambda variable capture lists:</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">template<typename... Args></font></div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">auto f(Args&& args) {</font></div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">  return [...args = std::forward<Args>(args)] {</font></div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">     // Use args</font></div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">  };</font></div><div style="margin:0px;font-size:13px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">}</font></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="font-family:Helvetica;font-size:12px"><br></span></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="font-family:Helvetica;font-size:12px">Here, `args` is actually a collection of init-capture declarations. In DWARF one might want to represent these as </span></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="font-family:Helvetica;font-size:12px">`DW_TAG_member`s on the anonymous lambda structure. However, neither <span style="color:rgb(0,0,0)">DW_TAG_formal_parameter_pack nor </span><span style="color:rgb(0,0,0)">DW_TAG_template_parameter_pack would allow such a representation.</span></div></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">With C++26, parameter packs can be used in structured binding declarations:</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><pre class="gmail-notranslate" style="box-sizing:border-box;margin-top:0px;overflow:auto;line-height:1.45;color:rgb(5,12,20);border-radius:6px"><code class="gmail-notranslate" style="box-sizing:border-box;padding:0px;margin:0px;background-image:none;background-position:0% 0%;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;border-radius:6px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit"><font face="Monaco" size="2">struct C { int x = 1, y = 2, z = 3; };
</font><font face="HelveticaNeue" size="2"><br></font></code></pre><pre class="gmail-notranslate" style="box-sizing:border-box;margin-top:0px;overflow:auto;line-height:1.45;color:rgb(5,12,20);border-radius:6px"><font face="Monaco"><font size="2">template<int N></font><code class="gmail-notranslate" style="box-sizing:border-box;padding:0px;margin:0px;background-image:none;background-position:0% 0%;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;border-radius:6px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit"><font size="2">
</font><font face="Monaco" size="2">void foo() {
  auto [d, ...e] = C();
}</font></code></font></pre></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="font-family:Helvetica;font-size:12px">Here, `e` is a collection of variable declarations. <span style="color:rgb(0,0,0)">In DWARF one might want to represent these as `DW_TAG_variable`s local to the function `foo`. But, again, neither of the upcoming parameter pack tags would allow this.</span></div><div style="font-family:Helvetica;font-size:12px"><br></div><div style="font-family:Helvetica;font-size:12px">More discussion on this is available in LLVM issue #152282 [3]</div></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal;min-height:15px"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">We propose a new tag `DW_TAG_variable_pack`, which functions similar to `<span style="color:rgb(0,0,0)">DW_TAG_template_parameter_pack`</span> and `<span style="color:rgb(0,0,0)">DW_TAG_formal_parameter_pack`. The tag's purpose is to encode packs of variable declarations.</span></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal;min-height:15px"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Document changes</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">================</div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><p style="box-sizing:border-box;color:rgb(0,0,0)"><font face="HelveticaNeue" size="2">Add the following new tags to Table 2.1, "Tag names", to Table 7.3, "Tag encodings", and to Table A.1, "Attributes by tag value":</font></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><span style="font-family:HelveticaNeue"><font size="2">* DW_TAG_variable_pack</font></span></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><font size="2" face="HelveticaNeue">  * Allowable attributes:</font></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><span style="font-family:HelveticaNeue;font-size:small">    * DECL</span></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><font size="2" face="HelveticaNeue">    * DW_AT_name</font></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><font size="2" face="HelveticaNeue">    * DW_AT_sibling</font></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><font size="2" face="HelveticaNeue"><br></font></p><p style="box-sizing:border-box;color:rgb(0,0,0)"><font size="2" face="HelveticaNeue">Add a new sub-chapter in Chapter 4 Data Objet and Object List Entries:</font></p></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">[NEW TEXT]</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">==========</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Chapter 4.4 Variable Packs</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">A pack is a named entity that represents arbitrary many variable declarations. Indexing into the entity to retrieve individual members of the pack is language dependent. Such program entities may be represented in DWARF using `DW_TAG_variable_pack`. The `DW_AT_name` attribute can be used specify the name of the pack entity in the source.</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">For each variable declaration introduced by the pack in the source, the `DW_TAG_variable_pack` has a `DW_TAG_variable` or `DW_TAG_member` child. The order of the children is the same as the order in which the variable declarations are introduced in the source.</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><non-normative></div><div style="color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">DW_TAG_template_parameter_pack and DW_TAG_function_parameter_pack describe template and function parameter packs respectively. In C++, packs can also represent collections of variable declarations. For example, a lambda capture list may capture a pack of variables or a structured binding may decompose to a pack of variables (see examples in Appendix D.17).</div><div style="color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"></non-normative></div></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><<<<<<<<<<<<<<<</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Add a new example to Appendix D: Examples:</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">[NEW TEXT]</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">==========</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Appendix D.17 Variable Pack Examples</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Consider following C++20 lambda:</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">1 template<typename... Args></font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">2 auto f(Args&& args) {</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">3   return [...captured = std::forward<Args>(args)] {</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">4     return captured...[0] + captured...[1]; // Pack indexing since C++26</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">5   };</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">6 }</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">7</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font face="Monaco">8 int main() { auto x = f(1, 2); }</font></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="font-family:"Helvetica Neue"">```</span></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="font-family:"Helvetica Neue""><br></span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="font-family:Helvetica;font-size:12px"><font color="#000000">Here, `captured` is a collection of init-capture declarations. A DWARF producer may choose to represent the pack members as </font></span><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">`DW_TAG_member`s on the anonymous lambda structure:</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br></span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">```</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000">    DW_TAG_subprogram</font></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000">        DW_AT_name("f")</font></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000">        ! Anonymous lambda structure</font></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">        DW_TAG_class_type</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">          DW_TAG_variable_pack</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_AT_decl_line(3)</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_AT_name("captured")</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_TAG_member</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              ! Optional name a producer may want to give the pack children</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_name("captured:0")</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_data_member_location(0x0)</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_TAG_member</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              ! Optional name a producer may want to give the pack children</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_name("captured:1")</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_data_member_location(0x4)</span></div></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">```</span></div><div style="font-size:13px;margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0)"><br></span></div></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Consider following C++26 structured binding pack declaration:</div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><pre class="gmail-notranslate" style="font-size:12px;box-sizing:border-box;margin-top:0px;overflow:auto;line-height:1.45;color:rgb(5,12,20);border-radius:6px"><code class="gmail-notranslate" style="box-sizing:border-box;padding:0px;margin:0px;background-image:none;background-position:0% 0%;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;border-radius:6px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit"><font size="2" face="Monaco">1 struct C { int x = 1, y = 2, z = 3; };
</font><font size="2" face="HelveticaNeue">2</font></code></pre><pre class="gmail-notranslate" style="font-size:12px;box-sizing:border-box;margin-top:0px;overflow:auto;line-height:1.45;color:rgb(5,12,20);border-radius:6px"><font face="Monaco"><font size="2">3 template<int N></font><code class="gmail-notranslate" style="box-sizing:border-box;padding:0px;margin:0px;background-image:none;background-position:0% 0%;background-size:auto;background-repeat:repeat;background-origin:padding-box;background-clip:border-box;border-radius:6px;word-break:normal;border:0px;display:inline;overflow:visible;line-height:inherit"><font size="2">
</font><font size="2" face="Monaco">4 void foo() {
5   auto [d, ...e] = C();
6 }</font></code></font></pre></div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">```</div><div style="font-size:13px;color:rgb(0,0,0);margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="font-size:13px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000"><span style="font-size:12px">Here, `e` is a collection of variable declarations. </span><span style="font-size:12px">A DWARF producer may represent the pack members as `DW_TAG_variable`s:</span></font></div><div style="font-size:13px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000"><span style="font-size:12px">```</span></font></div><div style="font-size:13px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="font-size:12px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000">    DW_TAG_subprogram</font></div><div style="font-size:12px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000">        DW_AT_name("foo")</font></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">        DW_TAG_variable_pack</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_AT_decl_line(5)</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_AT_name("e")</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_TAG_variable</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              ! Optional name a producer may want to give the pack children</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_name("e:0")</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_location(...)</span></div><div style="margin:0px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">            DW_TAG_member</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              ! Optional name a producer may want to give the pack children</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_name("e:1")</span></div><div style="margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">              DW_AT_location(...)</span></div></div></div><div style="font-size:13px;margin:0px;line-height:normal;font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><font color="#000000"><span style="font-size:12px">```</span></font></div></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><span style="color:rgb(0,0,0)"><<<<<<<<<<<<<<<</span></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">Links</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">====</div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal"><br></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">[1]: <a href="https://dwarfstd.org/issues/250516.1.html" target="_blank">https://dwarfstd.org/issues/250516.1.html</a></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">[2]: <a href="https://en.cppreference.com/w/cpp/language/parameter_pack.html" target="_blank">https://en.cppreference.com/w/cpp/language/parameter_pack.html</a></div><div style="margin:0px;font-size:13px;line-height:normal;font-family:"Helvetica Neue";font-size-adjust:none;font-kerning:auto;font-variant-alternates:normal;font-variant-ligatures:normal;font-variant-numeric:normal;font-variant-east-asian:normal;font-feature-settings:normal">[3]: <a href="https://github.com/llvm/llvm-project/issues/152282" target="_blank">https://github.com/llvm/llvm-project/issues/152282</a></div></div>-- <br>
Dwarf-discuss mailing list<br>
<a href="mailto:Dwarf-discuss@lists.dwarfstd.org" target="_blank">Dwarf-discuss@lists.dwarfstd.org</a><br>
<a href="https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss" rel="noreferrer" target="_blank">https://lists.dwarfstd.org/mailman/listinfo/dwarf-discuss</a><br>
</blockquote></div>