starałem się ponowne typ zwracanej przez operatora w moim wleczonego typ zwracany innej funkcji, ale niestety dzyń nie akceptują toDlaczego to użycie operatora w końcowym typie powrotu jest kompilowane?
struct A {
int operator[](int);
auto at(int i) -> decltype((*this)[i]);
};
Clang mówi, że moja klasa nie posiada operator []. Gcc zaakceptował mój kod. Czy mój kod jest rzeczywiście nieważny?
Clang powinno być prawo, 'this' nie jest dostępna w momencie deklaracji funkcji składowej, jest ona dostępna tylko wewnątrz funkcji składowej. (§9.3.2/1 "W ciele niestatycznej funkcji składowej (9.3) słowo kluczowe" this "jest wyrażeniem prvalue [...]"). – Xeo
@xeo i nie zgadzam się. jako ostatnia zmiana, komitet w Madrycie użył tego wewnątrz wstecznego typu, który jest ważny, aby ułatwić dziedziczenie stałej funkcji elementu zamykającego. –
Jeśli clang mówi, że nie ma 'operator [] (int)', jest to oczywiście błędne. Więc jakie jest pytanie? Kwestią dotyczącą ważności użycia tego "tutaj" jest * inny *. Zgadzam się z Johannesem, że musi tu być ważny. – Walter