3 Stimmen

Rückgabe der Adresse einer lokalen oder temporären Variablen bei Verwendung des Rückgabewerts von C++0x decltype

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X