decltype na declaração do método de classe: erro quando usado antes do membro "referenciado" ser declarado

Considere ocódigo seguinte:

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

    int data;
};

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

Dá o seguinte erro:

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

No entanto, se eu colocardata acimafunc(), não dá erro (código ao vivo):

struct test {    
    int data;

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

...

Então minha pergunta é: por quedecltype não considerando membros declarados depois (quandodecltype é usado em uma declaração de método, não na definição)? Também quero saber se há alguma alteração nesse comportamento em futuras iterações do padrão de idioma.

Por favor, note que eu estou pedindo isso porque eu estava esperandodecltype se comportar de maneira diferente. Minha convenção de codificação é colocar membros de dados de classe abaixo das funções de classe. Certamente esse comportamento diferente afetaria a maneira como eu organizo meus alunos. Ficaria muito grato se você pudesse fornecer qualquer solução alternativa que preservasse minha convenção de codificação.

questionAnswers(1)

yourAnswerToTheQuestion