I have abstract class A and derived class B that publicly inherits from A.
I pass a const pointer to a const A to a function. In this function I static_cast this to a const pointer to a const B and get the error type qualifiers ignored on cast result type (because we use -Werror=ignored-qualifiers).
What can be so wrong here ? I have all const qualifiers required, seems to me.
void foo(const A* const pA)
{
const B* const pB = static_cast<const B* const>(pA); // Error
// ... use pB ...
}
Edit : using dynamic_cast instead solves it. Why though ?
The top-level qualifier. That is, the second one here:
static_cast<const B* const>(pA).The cast returns a pointer prvalue, and (non-class non-array) prvalues can't have cv-qualifiers, so
constis silently ignored.