Decltype en la declaración del método de clase: error cuando se usa antes de que se declare el miembro "referenciado"

Considera elsiguiente código:

struct test {    
    auto func() -> decltype(data) {}  // ERROR

    int data;
};

int main() {
    test t;
    t.func();
}

Da el siguiente error:

main.cpp:2:29: error: 'data' was not declared in this scope
     auto func() -> decltype(data) {}

Sin embargo, si colocodata encimafunc(), no da ningún error (código en vivo):

struct test {    
    int data;

    auto func() -> decltype(data) {}
};

...

Y entonces mi pregunta es, ¿por qué?decltype sin considerar miembros declarados después de esto (cuandodecltype se utiliza en una declaración de método, no en la definición)? También quiero saber si hay algún cambio en este comportamiento en futuras versiones del estándar de idioma.

Tenga en cuenta que estoy preguntando esto porque estaba esperandodecltype comportarse de manera diferente. Mi convención de codificación es colocar miembros de datos de clase debajo de las funciones de clase. Seguramente este comportamiento diferente afectaría la forma en que organizo a los miembros de mi clase. Le agradecería mucho que me proporcionara alguna solución que pudiera preservar mi convención de codificación.