Ho appena scoperto che il seguente codice non è una valida C++ (che non analizza in int
dopo ~
):È legale chiamare un distruttore su int32_t?
int x = 5;
x.~int();
Tuttavia, il seguente frammento funziona:
int32_t x = 5;
x.~int32_t();
Questo perché int32_t
è un typedef
nella mia particolare implementazione di C++ e un distruttore può, apparentemente, essere chiamato su qualsiasi tipo typedef'ed.
La mia domanda è: è necessaria un'implementazione di C++ per consentire la compilazione del secondo frammento? In particolare, è int32_t
garantito come typedef, ed è il compilatore necessario per consentire la distruzione di un typedef se sa che typedef typedef qualcosa a int?
Sì. 'int32_t' non è un tipo built-in e non può essere una macro. –
@ Cheersandhth.-Alf La bozza standard di C++ 14 afferma 'typedef signed intere type int32_t;' come la definizione di 'int32_t'. Per quanto posso dire, questo non lascia molto spazio per i tipi definiti dall'utente e tutti o anche una macro. – Downvoter
Per evitare una domanda vicina/aprire una guerra di domande, non ho intenzione di votare per chiudere come duplicato, MA ... questo è un duplicato della domanda collegata. Solo perché quell'altra domanda non menziona 'int32_t' non significa che quell'altra domanda non risponda alle tue. –