consideri il following code:decltype nella dichiarazione di metodo di una classe: errore quando usato prima "riferimento" membro è dichiarato
struct test {
auto func() -> decltype(data) {} // ERROR
int data;
};
int main() {
test t;
t.func();
}
Si dà il seguente errore:
main.cpp:2:29: error: 'data' was not declared in this scope
auto func() -> decltype(data) {}
Tuttavia, se ho posto data
sopra func()
, non dà alcun errore (live code):
struct test {
int data;
auto func() -> decltype(data) {}
};
...
E così la mia domanda è: perché è decltype
, non considerando i membri dichiarati dopo (quando decltype
viene utilizzato in una dichiarazione di metodo, non nella definizione)? Voglio anche sapere se ci sono cambiamenti in questo comportamento nelle future iterazioni dello standard di linguaggio.
Si prega di notare che sto chiedendo questo perché mi aspettavo
decltype
a comportarsi in modo diverso. La mia convenzione di codifica consiste nel posizionare membri di dati di classe al di sotto delle funzioni di classe. Sicuramente questo diverso comportamento influenzerebbe il modo in cui organizzo i membri della mia classe. Sarei molto grato se è possibile fornire alcuna soluzione alternativa che avrebbe preservare la mia convenzione di codifica.
Sorry - la natura del C++, ereditato da C . –
non è solo 'decltype', anche un semplice' typedef' mostra la [stesso comportamento] (http://coliru.stacked-crooked.com/view?id=8f959fbd70b0b7d44c21ff0d71967fd5-6f7ec8a47f20223a17b26973b6e13527). Spostare il 'typedef' sopra la definizione della funzione membro ovviamente risolverà il problema. – Praetorian
@Praetorian Quindi è un problema inerente ... Peccato. –