Deklarationstyp in Klassenmethodendeklaration: Fehler bei Verwendung, bevor das referenzierte Element deklariert wird

Bedenke diefolgenden Code:

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

    int data;
};

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

Es gibt den folgenden Fehler:

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

Allerdings wenn ich platzieredata überfunc(), es gibt keinen Fehler aus (Live-Code):

struct test {    
    int data;

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

...

Und so ist meine Frage, warum istdecltype ohne Berücksichtigung der Mitglieder, die danach deklariert wurden (wann)decltype wird in einer Methodendeklaration verwendet, nicht in der Definition)? Ich möchte auch wissen, ob sich dieses Verhalten in zukünftigen Iterationen des Sprachstandards ändert.

Bitte beachten Sie, dass ich dies frage, weil ich erwartet hattedecltype sich anders verhalten. Meine Codierungskonvention besteht darin, Klassendatenelemente unterhalb der Klassenfunktionen zu platzieren. Sicherlich würde sich dieses unterschiedliche Verhalten auf die Organisation meiner Klassenmitglieder auswirken. Ich wäre Ihnen sehr dankbar, wenn Sie einen Workaround bereitstellen könnten, der meine Codierungskonvention beibehält.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage