This document discusses the practical challenges of using type checking to improve control flow integrity (CFI). Type checking allows control transfers only if the caller and callee types match, which can provide a more precise control flow graph (CFG). However, type checking faces challenges for deployment in C/C++, such as type collisions, lack of type diversification, and covariant return types. Resolving these issues, such as through global type diversification, complicates dynamic loading and separate compilation. The document provides examples and data on type collisions found in popular applications to illustrate these challenges.