Beim Testen des C++ - Compilers VS2015 bin ich auf einen seltsamen Fehler mit dem Schlüsselwort default
gestoßen. Wenn ich das tue:Möglicher Fehler bei der Behandlung des Schlüsselwortes `default` in VS2015 C++
struct Dummy
{
Dummy() = default;
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
ich
Fehler C2280: 'Dummy :: Dummy (konst Dummy &)': Der Versuch, eine gelöschte Funktion
Notiz zu verweisen: Siehe Deklaration von ‚Dummy: : Dummy‘
Aber wenn ich einen leeren Konstruktor
struct Dummy
{
Dummy() {}
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
Der Code wird kompiliert. Das Ausführen des ersten Beispiels mit g++ oder clang führt zu keinem Fehler.
Warum sollte die Verwendung des Standardkonstruktors mit VS2015 versuchen, den Kopierkonstruktor zu verwenden, wo es nicht in g ++ oder clang?
Was bekommen Sie von 'const Dummy & r2 {Dummy()};'? –
Zugehörig: [Elision versus explizit gelöschte Copy/Move-Konstruktoren kopieren/verschieben] (http: // stackoverflow.com/questions/20589622) –
Bitte beachten Sie diese http://stackoverflow.com/questions/31264984/c-compiler-error-c2280-attempting-to-reference-a-deleted-function-invisual –