Type of reasons: Performance critical; Security; Expressivity;
Each of them can be a necessary reason. E.g "polymorphism" in C through transparent unions