decltype w deklaracji metody klasy: błąd, gdy deklarowany jest element „odwołany”
Weź pod uwagęnastępujący kod:
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
Daje następujący błąd:
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
Jeśli jednak umiemdata
powyżejfunc()
, nie daje żadnego błędu (kod na żywo):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
A więc moje pytanie brzmi: dlaczego tak jestdecltype
nie biorąc pod uwagę członków zadeklarowanych po tym (kiedydecltype
jest używany w deklaracji metody, a nie w definicji)? Chcę też wiedzieć, czy w przyszłych iteracjach standardu językowego zachodzą jakieś zmiany w tym zachowaniu.
decltype
zachowywać się inaczej. Moja konwencja kodowania polega na umieszczaniu elementów danych klasy poniżej funkcji klasy. Z pewnością to odmienne zachowanie wpłynęłoby na to, jak organizuję moich członków klasy. Byłbym bardzo wdzięczny, gdybyście mogli podać jakieś obejście, które zachowałoby moją konwencję kodowania.