>>20
C++ has type checking, but I am not talking about (C++) type checking. You're talking about enforcing invariants that aren't relevant to C++'s type system. They can't be checked. There are other language families which can check these, and even make they relevant to the type system.
(Even if they were type-related, C++ is not a safe language by any means. The user can bullshit types all they like with the minimum of ceremony.)