decltype в объявлении метода класса: ошибка при использовании до объявления «ссылочного» члена

Рассмотримследующий код:

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

    int data;
};

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

Это дает следующую ошибку:

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

Однако, если я размещуdata вышеfunc()не выдает ошибок (живой код):

struct test {    
    int data;

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

...

И вот мой вопрос, почемуdecltype не считая членов, объявленных после него (когдаdecltype используется в объявлении метода, а не в определении)? Я также хочу знать, будут ли какие-либо изменения в этом поведении в будущих итерациях языкового стандарта.

Обратите внимание, что я спрашиваю это, потому что я ожидалdecltype вести себя по-другому. Мое соглашение о кодировании заключается в размещении членов данных класса ниже функций класса. Конечно, это другое поведение повлияет на то, как я организую своих учеников. Я был бы очень признателен, если бы вы предоставили любой обходной путь, который бы сохранил мое соглашение о кодировании.

Ответы на вопрос(1)

Ваш ответ на вопрос