The relevant wording is in C++11 [class.ctor]p5 (emphasis mine):
A default constructor for a class X
is a constructor of class X
that can be called without an argument. If there is no user-declared constructor for class X
, a constructor having no parameters is implicitly declared as defaulted (8.4). [...] 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,
[...]
- any direct or virtual base class, or non-static data member with no brace-or-equal-initializer, has class type
M
(or array thereof) and either M
has no default constructor or overload resolution (13.3) as applied to M
's default constructor results in an ambiguity or in a function that is deleted or inaccessible from the defaulted default constructor, or
[...]
Your class A
has no default constructor, so a defaulted default constructor (whether implicit or explicit) for a class X
(whether union or non-union) containing a non-static data member of type A
without an initialiser leads to the default constructor for X
being deleted. It has to: there's simply no way for the compiler to generate any other default constructor.
As for your follow-up question in the comments:
If instead of A
not having a default constructor, it has a non-trivial default constructor, then there is a difference between using that in a union and in a non-union class, and that is also part of [class.ctor]p5: it is the first bullet point that I included, without emphasis, in my earlier quote.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…