Вы можете использовать dynamic_cast
для:
- приведение указателя к другому указателю (также должно быть
const
- также правильно).
- приведение ссылки на другую ссылку (также должно быть
const
- также правильно).
Вы не можете использовать его для:
- приведите указатель на ссылку, или
- приведение ссылки на указатель.
По этой причине
dynamic_cast<Square*>(s)
неправильно.
Вы можете использовать
if ( dynamic_cast<Square const*>(&s) )
для устранения ошибки компилятора.
Вы можете использовать dynamic_cast<Square const&>(s)
(приведение ссылки), но для этого требуется блок try
/ catch
.
try
{
auto x = dynamic_cast<Square const&>(s);
}
catch ( std::bad_cast )
{
return false;
}
// No exception thrown.
return true;