En su artículo de The Daily WTF del 12 de octubre de 2026, Remy Porter examina un ejemplo de C++ anonimizado por Alan. Porter atribuye el diseño a desarrolladores que no dominan con seguridad varios conceptos fundamentales de la orientación a objetos. También critica las analogías con taxonomías biológicas, porque pueden exagerar la importancia de la herencia.

type-check.cpp
#define IS_INSTANCE_OF(objectPointer, className) ((bool) (dynamic_cast<className *>(((Organism *) objectPointer)) != NULL))
#define IS_MEMBER_OF(objectPointer, className) IS_INSTANCE_OF(objectPointer, className)

Animal::StealTentacle(Animal *animal) recibe un puntero sin procesar a Animal. Termina si this no representa un Octopus o un Squid. Después llama a animal->mLimbs->GetFirstTentacle(). Cuando obtiene un Limb, ejecuta limb->AttachToAnimal(this).

IS_INSTANCE_OF implementa la restricción. La macro convierte objectPointer en Organism* mediante un cast de estilo C y pasa el resultado a dynamic_cast<className*>, cuyo valor compara con NULL. En C++, un cast de estilo C permite que el compilador elija distintas formas de conversión según el contexto y puede llegar a reinterpret_cast, que ignora la información de tipos. IS_MEMBER_OF solo es un alias temporal.

El comentario de la macro afirma que dynamic_cast siempre produce un resultado válido para el tipo de puntero recibido y propone Organism como solución. Porter considera errónea esa interpretación. Una conversión imposible devuelve NULL. dynamic_cast también puede hacer un crosscast entre ramas derivadas que comparten una base pública. Un cast a Dog* desde un puntero Cat* puede funcionar si el objeto más derivado contiene ambos subobjetos.

En el código real, IS_INSTANCE_OF(animal, Felid) va seguido de otro cast de estilo C a Felid*. Un comentario cercano admite que el autor solo espera que la conversión haga lo previsto. Porter califica el diseño de antipatrón de selección por tipo. El sistema de tipos y el polimorfismo deberían expresar la restricción. Un despacho dinámico bien empleado puede representar un dominio con claridad. El artículo cita The Design and Evolution of C++ de Bjarne Stroustrup, que advierte que RTTI permite esquivar los mecanismos del lenguaje y acabar con una mezcla poco convincente de sintaxis de C y comportamiento en tiempo de ejecución asociado a Smalltalk.