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.
decltype
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.