To get back at the original question, and in the correct context of a
compiler-provided default constructor, it looks to me that there is a
small note to your answer:
[quote]If the class has no user-declared constructor, then the C() will
not call the compiler-provided default constructor, but rather will
perform a special kind of initialization that does not involve the
constructor of C at all. Instead, it will directly value-initialize
every member of the class. For built-in types it results in
zero-initialization.[/quote]
You are probably referring to § 8.5, clause (8.2) (here from n4296):
"8 To value-initialize an object of type T means:
<...>
(8.2) — if T is a (possibly cv-qualified) 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;
<...>"
As you see, after zero-initialization, "if T has a non-trivial default
constructor, the object is default-initialized", which is a bit
different than "does not involve the constructor of C at all", and it
could not be otherwise, for a non-trivial default constructor.
The subsequent statement of the standard:
"An object that is value-initialized is deemed to be constructed and
thus subject to provisions of this International Standard applying to
“constructed” objects, objects “for which the constructor has
completed,” etc., even if no constructor is invoked for the object’s
initialization."
explicitly applies /if/ no constructor is invoked.