Remy Porters Beitrag im Daily WTF vom 12. Oktober 2026 untersucht ein von Alan anonymisiertes C++-Beispiel. Laut Porter stammt die Codebasis von Entwicklern, die zentrale objektorientierte Konzepte nur unsicher beherrschen. Er kritisiert außerdem biologische Taxonomie-Vergleiche für OO-Konzepte, weil sie die Bedeutung der Vererbung überhöhen können.

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) nimmt einen rohen Animal*-Zeiger entgegen. Die Methode kehrt zurück, wenn this kein Octopus oder Squid ist. Danach ruft sie animal->mLimbs->GetFirstTentacle() auf. Bei einem gefundenen Limb folgt limb->AttachToAnimal(this).

IS_INSTANCE_OF setzt diese Schranke um. Das Makro wandelt objectPointer per C-Style-Cast in Organism* um, übergibt den Wert an dynamic_cast<className*> und prüft auf NULL. Ein C-Style-Cast lässt den Compiler je nach Kontext zwischen mehreren Cast-Formen wählen und kann bis zu reinterpret_cast gelangen, der Typinformationen ignoriert. IS_MEMBER_OF ist nur ein vorläufiger Alias.

Der Kommentar zum Makro behauptet, dynamic_cast liefere für den übergebenen Zeigertyp immer ein gültiges Ergebnis, und schlägt Organism als Umweg vor. Porter hält diese Deutung für falsch. Ein nicht möglicher Cast liefert NULL. dynamic_cast kann außerdem zwischen Seitenzweigen mit einer gemeinsamen öffentlichen Basisklasse wechseln. Ein Cast von einem Cat*-Zeiger zu Dog* kann funktionieren, wenn das vollständig erzeugte Objekt beide Teilobjekte enthält.

Im tatsächlichen Einsatz folgt auf IS_INSTANCE_OF(animal, Felid) ein weiterer C-Style-Cast zu Felid*. Ein naher Kommentar räumt sinngemäß ein, dass der Autor nur auf das erwartete Ergebnis hofft. Porter bezeichnet das als Type-Switch-Anti-Pattern. Die Typinformationen und die Polymorphie sollten die Einschränkung ausdrücken. Sorgfältig eingesetztes Dynamic Dispatch kann ein Domänenmodell sauber abbilden. Der Beitrag zitiert Bjarne Stroustrups The Design and Evolution of C++, wo vor RTTI-Code gewarnt wird, der Sprachmechanismen umgeht und eine schlechte Mischung aus C-ähnlicher Syntax und Smalltalk-ähnlichem Laufzeitverhalten erzeugt.