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

c++, casting, downcast, dynamic-analysis, static-analysis

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.

Problem

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.

Original source

Related problems