Created on 2015-02-12.00:00:00 last changed 95 months ago
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,...
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.
[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?
History | |||
---|---|---|---|
Date | User | Action | Args |
2017-02-06 00:00:00 | admin | set | status: ready -> cd4 |
2015-11-10 00:00:00 | admin | set | messages: + msg5580 |
2015-11-10 00:00:00 | admin | set | status: drafting -> ready |
2015-05-25 00:00:00 | admin | set | messages: + msg5509 |
2015-02-12 00:00:00 | admin | create |