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