編集 - 質問をもう少し文脈に入れます。
与えられた:
struct Base
{
...
};
struct Derived : public Base
{
...
};
class Alice
{
Alice(Base *const _a);
...
};
class Bob : public Alice
{
Bob(Derived *const _a);
...
};
実装しようとすると
Bob::Bob(Derived *const _d) : Alice(static_cast<Base*const>(_d)) { }
それは動作しません。const_cast
constnessを変更したくないのでaは意味がありません。また、指しているものを変更していないので、なぜg ++が教えてくれるのですか
invalid static_cast from type ‘Derived* const’ to type ‘Base* const’
? キャストを省略すると、
no matching function for call to ‘Alice::Alice(Derived* const)’
誰かがこれに光を当てることができれば、それは大歓迎です。