Proposed resolution (February, 2013): Change 9.5 [dcl.init] paragraph 7 as follows: To default-initialize an object of type T means: if T is a (possibly cv-qualified) class type (
Clause 11 [class]), the default
constructor (11.4.5 [class.ctor]) for T is called
(and the initialization is ill-formed if T has no ... Change 9.5 [dcl.init] paragraph 8 as follows: To value-initialize an object of type T means: ... if T is a (possibly cv-qualified) non-union class type
without a user-provided or deleted default constructor, then the object is
zero-initialized and the semantic constraints for
default-initialization are checked, and if T has
a non-trivial default constructor, the object is
default-initialized; ...
accessible
default constructor default constructor or overload
resolution (12.2 [over.match]) results in an ambiguity or
in a function that is deleted or inaccessible from the context of the
initialization);
According to 9.5 [dcl.init] paragraph 7, a trivial default
constructor is not used in value initialization, so the following
example would appear to be well-formed:
struct A { private: A() = default; };
int main() { A(); }