Bearbeiten:
Dies ist tatsächlich ein Fehler im Compiler, ich habe eine Fehler und erhielt die folgende Antwort.
Hallo Motti,
Wir danken Ihnen für die Einsendung dieser Ausgabe. Wie im Stackoverflow-Posting erwähnt, handelt es sich um einen Fehler in unserer decltype-Implementierung. Leider können wir diesen Fehler nicht in der nächsten Version von Visual Studio beheben, da der Code relativ ungewöhnlich ist und wir besonders ressourcenbeschränkt sind.
Die ursprüngliche Frage lautet
Ich spiele mit den C++0x-Funktionen von VS10 herum und bin auf das folgende Problem gestoßen.
std::map<int, int> map()
{
return std::map<int, int>();
}
template <class F>
auto call(F f) -> decltype(f())
{
auto ret = f();
return ret;
}
void check()
{
auto m = call(map);
}
Ich erhalte die folgende Warnung:
Warnung C4172: Rückgabe der Adresse einer lokalen oder temporären Variable
Wenn ich jedoch den Prototyp von call
den alten Stil zu sein:
std::map<int, int> call(F f)
Es ist gut, es ist auch gut, wenn call
ist keine Schablonenfunktion (auch nicht bei Verwendung abgeleiteter Rückgabetypen).
Wenn ich mir die Art der ret
Es ist std::map<int, int>
(keine Verweise oder Zeiger).
Ist dies ein Fehler in VS10 oder übersehe ich etwas.