Próbując skompilować ten prosty Klasa:Dlaczego decltype nie widzi deklaracji członka?
#include <vector>
struct M
{
// interface
auto begin() -> decltype(identities.begin())
{
return identities.begin();
}
// implementation
private:
std::vector<int> identities;
};
powoduje błąd:
$ g++-510 where.cpp -std=c++11
where.cpp:57:35: error: ‘struct M’ has no member named ‘identities’
auto begin() ->decltype(this->identities.begin())
^
where.cpp:57:35: error: ‘struct M’ has no member named ‘identities’
$ clang++ where.cpp -std=c++11 -Wall -pedantic -Wextra
where.cpp:57:35: error: no member named 'identities' in 'M'
auto begin() ->decltype(this->identities.begin())
~~~~^
Dlaczego nie decltype
zobaczyć element klasy?
w międzyczasie znalazłem obejście: zadeklarować zmienną składową przed użycie 'decltype'. Ale czy ktoś może podać standard, który nakazuje takie zachowanie? Czy jest to po prostu łatwiejsze dla twórców kompilatorów? – Bulletmagnet
Duplikat http://stackoverflow.com/q/12362888/866732? – WiSaGaN
Nie sądzę, że to duplikat, członek jest zadeklarowany powyżej funkcji tam. – TartanLlama