CWG Issue 2084 (original) (raw)
This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 118e. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2025-11-05
2084. NSDMIs and deleted union default constructors
Section: 11.4.5 [class.ctor]Status: CD4Submitter: Daveed VandevoordeDate: 2015-02-12
[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,- ...