Ricevo un errore del linker nel mio codice. L'ho individuato nel minimo essenziale di seguito.Errore di linker "vtable" (che coinvolge un distruttore virtuale con "= default") - potenziale bug in Clang 3.1?
Questo codice dà l'errore di linker "vtable per Pippo", si fa riferimento da: Pippo :: Foo()
class Foo {
public:
Foo();
virtual ~Foo() = default;
};
Foo::Foo() { }
Ma questo codice non dà errori:
class Foo {
public:
Foo();
virtual ~Foo() { }
};
Foo::Foo() { }
Perché? Pensavo che lo = default
avrebbe dovuto sostanzialmente fare la stessa cosa di quelle parentesi quadre vuote.
Aggiornamento: Sto utilizzando il "compilatore Apple LLVM 4.1", una parte di Xcode 4.5.2. Potrebbe essere un bug in questo compilatore? Potrebbe funzionare anche sull'ultimo GCC (che però la Apple non spedisce più). Vedi i commenti sotto per una discussione sui compilatori.
Aggiornamento 2: Come illustrato di seguito, la modifica della riga su virtual inline ~Foo() = default;
elimina questo errore. Questo non è semplicemente il essere un bug? Sembra che il compilatore non riconosca una funzione inline in questo caso senza scrivere esplicitamente inline
.
Provare 'virtual ~ Foo() noexcept = default;'. Penso di aver avuto un problema simile una volta e ho rinunciato a "default". Inoltre, penso che ci sia anche una DR su questo. –
@KerrekSB L'errore del linker è ancora presente con 'noexcept'. –
Questo funziona per me con gcc 4.7.2. – Kocka