¿Por qué debo inicializar las variables miembro en el orden en que se declaran?

Hoy escribí un código y obtuve un extraño error de compilación, que parece deberse a la inicialización de las variables miembro en un orden diferente al que fueron declaradas.

Ejemplo:

class Test {
    int a;
    int b;

public:
    Test() : b(1), a(2) {
    }
};

int main() {
    Test test;
    return 0;
}

Entonces si lo compilo con-Werror -Wall:

$ g++ -Werror -Wall test.cpp
test.cpp: In constructor ‘Test::Test()’:
test.cpp:3:9: error: ‘Test::b’ will be initialized after [-Werror=reorder]
test.cpp:2:9: error:   ‘int Test::a’ [-Werror=reorder]
test.cpp:6:5: error:   when initialized here [-Werror=reorder]
cc1plus: all warnings being treated as errors

me di cuenta que-Wall está pidiendo explícitamente a GCC que vaya por encima de la cima con advertencias, pero supongo que hay una razón para todas ellas. Entonces, ¿cómo podría importar el orden de inicialización de las variables miembro?

Respuestas a la pregunta(5)

Su respuesta a la pregunta