c++castingstatic-analysisdowncastdynamic-analysis

Are there any C++ tools that detect misuse of static_cast, dynamic_cast, and reinterpret_cast?


The answers to the following question describe the recommended usage of static_cast, dynamic_cast, and reinterpret_cast in C++:

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?

Do you know of any tools that can be used to detect misuse of these kinds of cast? Would a static analysis tool like PC-Lint or Coverity Static Analysis do this?

The particular case that prompted this question was the inappropriate use of static_cast to downcast a pointer, which the compiler does not warn about. I'd like to detect this case using a tool, and not assume that developers will never make this mistake.


Solution

  • Given that there is no reliable way of telling what type the pointer points to at compile time, this is a pretty hard problem to catch at compile time.

    The simplest method is to do the catch at run-time, using a macro "safe_cast" which compiles to a dynamic_cast with an assert in debug, and a static_cast in release.

    Now, during debugging, if the cast is inappropriate, the dynamic cast will return NULL, and assert. There is also no overhead during release.