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.

Pamiętaj, że pytam o to, ponieważ się spodziewałemdecltype 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.

questionAnswers(1)

yourAnswerToTheQuestion