|
|
Bad (UB): Base, foo = 86 Derived, fab = 43 Good: Base, foo = 43 Derived, fab = 43 |
|
|
Bad (UB): Base, foo = 43 Derived, fab = 43 Good: Base, foo = 43 Derived, fab = 43 |
| In a non-delegating constructor, initialization proceeds in the following order: (13.1) — First, and only for the constructor of the most derived class (1.8), virtual base classes are initialized in the order they appear on a depth-first left-to-right traversal of the directed acyclic graph of base classes, where “left-to-right” is the order of appearance of the base classes in the derived class base-specifier-list. (13.2) — Then, direct base classes are initialized in declaration order as they appear in the base-specifier-list (regardless of the order of the mem-initializers). (13.3) — Then, non-static data members are initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers). (13.4) — Finally, the compound-statement of the constructor body is executed. |