The C++ standard states that:
Nonstatic data members shall be initialized in the order they were declared in the class definition (again regardless of the order of the mem-initializers).
Why? Wouldn't it be more intuitive if members were initialized in the order they appear in the initializers and then default to order of declaration if they are not listed in the initializers?
EDIT RE: DUPLICATE
The accepted answer in the other question doesn't seem complete (I'm happy to be proved wrong but I need more explanation than there is in that answer).
It states that the reason why initialization is always in order of declaration is that while there may be multiple constructors, there can only be one destructor and it needs to use declaration to determine order of destruction.
I get why the compiler needs to use declaration order for destruction, but I don't understand why it needs to strictly enforce that same ordering at construction. And if they do need to be symmetrical why allow programmers to arbitrarily define the ordering of the initializers. Seems like if members MUST be initialized in a particular order it should be a compiler error to write initializers in a different order.