Yes, the construction procedure is always guaranteed. However, this does not guarantee the same as the order in which objects appear in the initializer list.
Members of variables are constructed in the order in which they are declared in the body of the class. For example:
struct A { }; struct B { }; struct S { A a; B b; S() : b(), a() { } };
First built
a , then b . The order in which member variables appear in the list of initializers does not matter.
James McNellis
source share