On 5/28/19 10:19 AM, Jakub Jelinek wrote:
On Tue, May 28, 2019 at 10:07:12AM -0400, Jason Merrill wrote:
"or captures a structured binding (explicitly or implicitly), the program is
ill-formed."
Is P0588R1 a DR that would be applied to older standards?

P0588 was certainly intended to apply to C++17, but I'd treat this as
overriding it, and not complain.

Ok.

--- gcc/cp/decl.c.jj    2019-05-20 14:52:26.871375569 +0200
+++ gcc/cp/decl.c       2019-05-20 15:48:33.563599150 +0200
+      && (DECL_NAMESPACE_SCOPE_P (decl) || TREE_STATIC (decl)))
+             if (TREE_STATIC (v[i]))

When can a structured binding not be TREE_STATIC?

All the block scope structured bindings that aren't explicitly static
nor thread_local are not TREE_STATIC

Right, of course!

As extern isn't allowed (yet), perhaps all DECL_NAMESPACE_SCOPE_P (decl)
structured bindings are TREE_STATIC and I could replace the
DECL_NAMESPACE_SCOPE_P (decl) test in cp_maybe_mangle_decomp
with TREE_STATIC (decl) instead.

OK with that change.

Jason

Reply via email to