En C++ le code suivant donne une erreur de compilation:Destructeurs de types builtin (int, char, etc ..)
void destruct1 (int * item)
{
item->~int();
}
Ce code est à peu près le même, je viens typedef l'int à un autre type et quelque chose de magique arrive:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
Pourquoi le deuxième code fonctionne-t-il? Est-ce qu'un int obtient un destructeur juste parce qu'il a été typedefed?
Dans le cas où vous vous demandez pourquoi on aimerait faire ceci: Cela vient du refactoring du code C++. Nous supprimons le tas standard et le remplaçons par des piscines auto-fabriquées. Cela nous oblige à appeler placement-nouveau et les destructeurs. Je sais que l'appel de destructeurs pour les types primitifs est inutile, mais nous voulons qu'ils soient dans le code au cas où nous remplacerions plus tard les POD par de vraies classes. Découvrir que les ints nus ne fonctionnent pas mais que les typedefed sont assez surprenants. Btw - J'ai une solution qui implique des fonctions de gabarit. Nous juste typedef à l'intérieur du modèle et tout va bien.
+1 pour "The Holy Standard". – ApprenticeHacker
Je pense que c'est ce qui rend std :: is_destructible si incohérent au sein des anciens compilateurs (2012-2014) – GameDeveloper
Ne peut pas assez voter pour cette réponse! – Nils