This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-11-11
[Accepted as a DR at the February, 2019 meeting.]
The current wording is not clear regarding examples like the following:
struct A { int x; } a; struct B {} b; template<int> int &get(const B&); struct C {}; int c[1]; auto [A] = a; // ok? auto [B] = b; // ok? auto [C] = c; // ok?
Notes from the April, 2017 teleconference:
Structured bindings have no C compatibility implications, so the tag/nontag treatment need not apply.
Proposed resolution (February, 2019):
Change _N4868_.6.4.1 [basic.scope.declarative] paragraph 4 as follows:
Given a set of declarations in a single declarative region, each of which specifies the same unqualified name,
they shall all refer to the same entity, or all refer to functions and function templates; or
exactly one declaration shall declare a class name or enumeration name that is not a typedef name and the other declarations shall all refer to the same variable, non-static data member, or enumerator, or all refer to functions and function templates; in this case the class name or enumeration name is hidden (_N4868_.6.4.10 [basic.scope.hiding]). [Note: A structured binding (9.6 [dcl.struct.bind]), namespace name (9.8 [basic.namespace]), or
aclass template name (Clause 13 [temp]) must be unique in its declarative region(9.8.3 [namespace.alias], Clause 13 [temp]). —end note]