Question

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.

Was it helpful?

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.

OTHER TIPS

Visual studio has warnings for some of these. C4946, for example. They're mostly turned off by default though.

http://msdn.microsoft.com/en-us/library/23k5d385.aspx

Boost offers polymorphic_pointer_downcast() and polymorphic_downcast() functions, which act like static_cast but will assert (typically only in debug builds) if the equivalent dynamic_cast fails.

See http://www.boost.org/doc/libs/1_61_0/libs/conversion/cast.htm for details.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top