&gt; By virtue of casting C is weakly typed, as is Java, C++ et al.<p>Java&#x27;s casts are dynamically checked, memory-safe and only work through the inheritance hierarchy, if you try to cast to an invalid type you&#x27;ll get an error. Putting it in the same class as a C-style cast makes your usage of &quot;weakly typed&quot; as  meaningless as it ever is.<p>For C++ — ignoring C-style casts — it depends which cast you use, dynamic_cast requires RTTI but IIRC it offers the same guarantees as Java&#x27;s cast; static_cast should check that the types are related and the conversion is valid at compile-time, reinterpret_cast is the &quot;weakly typed&quot; one (essentially a simpler version of a C-style cast).<p>&gt; I understand your intent, but I dislike the ambiguity of the phrasing.<p>Yet you use the expressions &quot;strongly typed&quot; and &quot;weakly typed&quot;?