This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
[Voted into WP at October 2003 meeting.]
In 11.4.5 [class.ctor] paragraph 5, the standard says "A constructor is trivial if [...]", and goes on to define a trivial default constructor. Taken literally, this would mean that a copy constructor can't be trivial (contrary to 220.127.116.11 [class.copy.ctor] paragraph 6). I suggest changing this to "A default constructor is trivial if [...]". (I think the change is purely editorial.)
Proposed Resolution (revised October 2002):
Change 11.4.5 [class.ctor] paragraph 5-6 as follows:
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-declaredconstructor for class X, a default constructor is implicitly declared. An implicitly-declareddefault constructor is an inline public member of its class. A constructor is trivial if it is animplicitly-declared default constructorand if:
- its class has no virtual functions (11.7.3 [class.virtual]) and no virtual base classes (11.7.2 [class.mi]), and
- all the direct base classes of its class have trivial constructors, and
- for all the nonstatic data members of its class that are of class type (or array thereof), each such class has a trivial constructor.
Otherwise, the constructor is non-trivial.
Change 11.4.7 [class.dtor] paragraphs 3-4 as follows (the main changes are removing italics):
If a class has no
user-declareddestructor, a destructor is declared implicitly. An implicitly-declareddestructor is an inline public member of its class. A destructor is trivial if it is animplicitly-declared destructorand if:
- all of the direct base classes of its class have trivial destructors and
- for all of the non-static data members of its class that are of class type (or array thereof), each such class has a trivial destructor.
Otherwise, the destructor is
In 11.5 [class.union] paragraph 1, change "trivial constructor" to "trivial default constructor".
In 6.7.7 [class.temporary] paragraph 3, add to the reference to 11.4.5 [class.ctor] a second reference, to 18.104.22.168 [class.copy.ctor].