Podczas testowania kompilatora VS2015 C++ natknąłem się na dziwny błąd ze słowem kluczowym default
. Jeśli mam zrobić:Możliwy błąd w obsłudze słowa kluczowego `default` w VS2015 C++
struct Dummy
{
Dummy() = default;
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
uzyskać
błędu C2280: 'Dummy :: Dummy (const Dummy &)': próbuje odwołać usuniętą funkcję
uwaga: patrz deklaracja „Manekina: : Dummy”
Ale jeśli mogę użyć pustego konstruktora
struct Dummy
{
Dummy() {}
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
Kod się kompiluje. Uruchomienie pierwszego przykładu z g++ lub clang nie powoduje błędu.
Dlaczego użycie domyślnego konstruktora z VS2015 powinno próbować użyć konstruktora kopiowania, który nie jest w g ++ lub clang?
Co otrzymasz od 'const Dummy & r2 {Dummy()};'? –
Powiązane: [Kopiuj/przenieś elizę w stosunku do jawnie skasowanych konstruktorów kopiowania/przenoszenia] (http: // stackoverflow.com/questions/20589622) –
Zobacz http://stackoverflow.com/questions/31264984/c-compiler-error-c2280-attempting-to-reference-a-deleted-function-in-visual –