The initialization order, as described https://en.cppreference.com/w/cpp/language/constructor#Initialization_order[here], is:
. If the constructor is for the most-derived class, virtual bases are initialized in the order in which they appear in depth-first left-to-right traversal of the base class declarations (left-to-right refers to the appearance in base-specifier lists)
. Then, direct bases are initialized in left-to-right order as they appear in this class's base-specifier list
. Then, non-static data members are initialized in order of declaration in the class definition.
* {cpp} Core Guidelines - https://github.com/isocpp/CppCoreGuidelines/blob/e49158a/CppCoreGuidelines.md#c47-define-and-initialize-member-variables-in-the-order-of-member-declaration[C.47: Define and initialize member variables in the order of member declaration]