https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88503
Bug ID: 88503 Summary: 'invalid static_cast' error message could be more helpful Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: petschy at gmail dot com Target Milestone: --- class Parent; class Derived; Derived* foo(Parent* p) { return static_cast<Derived*>(p); } $ g++-9.0.0 -Wall -Wextra -c 20181214-fwddecl_vs_static_cast.cpp 20181214-fwddecl_vs_static_cast.cpp: In function ‘Derived* foo(Parent*)’: 20181214-fwddecl_vs_static_cast.cpp:6:32: error: invalid static_cast from type ‘Parent*’ to type ‘Derived*’ 6 | return static_cast<Derived*>(p); | ^ Now imagine that your project is somewhat more complex than the above example, and Derived derives from Parent. You know it, you are used to it. However, some code needs only the forward declarations, at other places the full definition is needed. When I bumped into this error, it caused me quite some time to figure out what is going on. I double/triple/quad checked the names of the classes, no typo, yet the error. It turned out of course that only the forward declarations were available in that TU. It would be really useful if the error message was a bit more verbose, mentioning the fact if either types were forward declared, and if no parent-child relationship info is available.