This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115d. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-10-26
[Adopted at the February, 2016 meeting.]
According to 11.4.5 [class.ctor] paragraph 4 says,
A defaulted default constructor for class X is defined as deleted if:
X is a union-like class that has a variant member with a non-trivial default constructor,
...
This should make the following example ill-formed:
struct S { S(); }; union U { S s{}; } u;
because the default constructor of U is deleted. However, both clang and g++ accept this without error. Should the rule be relaxed for a union with an NSDMI?
Notes from the May, 2015 meeting:
An NSDMI is basically syntactic sugar for a mem-initializer, so the presence of one should be treated as if a user-declared default constructor were present.
Proposed resolution (October, 2015):
Change 11.4.5 [class.ctor] paragraph 4 as follows:
...A defaulted default constructor for class X is defined as deleted if:
X is a union that has a variant member with a non-trivial default constructor and no variant member of X has a default member initializer,
X is a
union-likenon-union class that has a variant member M with a non-trivial default constructor and no variant member of the anonymous union containing M has a default member initializer,...