Der Versuch, diese einfache Klasse zu kompilieren:Warum sieht declltype die Member-Deklaration nicht?
#include <vector>
struct M
{
// interface
auto begin() -> decltype(identities.begin())
{
return identities.begin();
}
// implementation
private:
std::vector<int> identities;
};
führt zu einem Fehler:
$ 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())
~~~~^
Warum decltype
sehen nicht die Klasse Mitglied?
in der Zwischenzeit eine Abhilfe, die ich gefunden: die Membervariable vor der deklarieren 'declype' verwenden. Aber kann jemand den Standard zitieren, der dieses Verhalten vorschreibt? Oder ist es einfach für Compilerschreiber? – Bulletmagnet
Duplikat von http://stackoverflow.com/q/12362888/866732? – WiSaGaN
Ich glaube nicht, dass das ein Duplikat ist, das Mitglied wird über der Funktion dort deklariert. – TartanLlama