Durante il test del compilatore C++ VS2015 mi sono imbattuto in uno strano bug con la parola chiave default
. Se faccio:Possibile errore nella gestione della parola chiave `default` in VS2015 C++
struct Dummy
{
Dummy() = default;
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
ottengo
errore C2280: 'Dummy :: Dummy (const Dummy &)': il tentativo di fare riferimento a una funzione eliminata
nota: vedi dichiarazione di 'Dummy: : Dummy'
Ma se io uso un costruttore vuoto
struct Dummy
{
Dummy() {}
Dummy(const Dummy &) = delete;
};
int main()
{
const Dummy& ref = Dummy();
return 0;
}
Il codice viene compilato. L'esecuzione del primo esempio con g++ o clang non produce alcun errore.
Perché utilizzare il costruttore predefinito con VS2015 tenta di utilizzare il costruttore di copie in cui non è in g ++ o clang?
Cosa ottieni da 'const Dummy & r2 {Dummy()};'? –
Correlati: [Copia/sposta elisione contro i costruttori copia/sposta eliminati in modo esplicito] (http: // stackoverflow.it/questions/20589622) –
Si prega di consultare questo http://stackoverflow.com/questions/31264984/c-compiler-error-c2280-attempting-to-reference-a-deleted-function-in-visual –