The body of an expansion statement is treated as if it's part of a template (e.g. you have to put `typename` in various places). If a structured binding pack could appear outside a template, it would force the entire remainder of the current scope to be treated as a template.

On Wed, Feb 4, 2026 at 8:05 AM Артём Колпаков via Std-Discussion <std-discussion@lists.isocpp.org> wrote:
Good afternoon. Why can't the structured binding pack be used outside of the template, whereas the expansion statement can. It seems to me that for tuple-like types there is no significant difference between these language features, but to use the first one, you have to use a synthetic template where there is no real one. Is this a language defect?

I'm not sure what the documents say about this. I am writing immediately after observing the error on goldbolt.

Thank you for your attention.
Artyom Kolpakov
--
Std-Discussion mailing list
Std-Discussion@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion


--
Brian Bi