En C++ el siguiente código da un error del compilador:destructores de tipos internos (int, char, etc ..)
void destruct1 (int * item)
{
item->~int();
}
Este código es casi el mismo, sólo typedef int a otro tipo y algo mágico sucede:
typedef int myint;
void destruct2 (myint * item)
{
item->~myint();
}
¿Por qué funciona el segundo código? ¿Un int obtiene un destructor solo porque ha sido typedefed?
En caso de que se pregunte por qué alguna vez le gustaría hacer esto: Esto proviene de la refactorización del código C++. Estamos eliminando el montón estándar y reemplazándolo con grupos propios. Esto requiere que llamemos colocación nueva y los destructores. Sé que llamar a los destructores para tipos primitivos es inútil, pero queremos que estén en el código, sin embargo, en caso de que más adelante sustituyamos los POD por clases reales.
Descubrir que las int desnudas no funcionan, pero las de tipo type do es bastante sorprendente.
Btw - Tengo una solución que implica plantillas de funciones. Simplemente tipeamos dentro de la plantilla y todo está bien.
+1 for "The Holy Standard". – ApprenticeHacker
Creo que esto es lo que hace que std :: is_destructible sea tan inconsistente dentro de los viejos compiladores (2012-2014) – GameDeveloper
¡No se puede votar esta respuesta lo suficiente! – Nils