# - Ключевое слово `explicit`. Зачем нужны `explicit` конструкторы - зачем `auto&&` ```cpp for (auto&& s : shapes) { s->draw(qp); } ``` - порассуждать, что с этим кодом не так ```cpp for (auto&& s : m_frame->shapes) { try { dynamic_cast<Circle&>(*s); out << "Circle" << endl; } catch (std::bad_cast) {} try { dynamic_cast<Rectangle&>(*s); out << "Rectangle" << endl; } catch (std::bad_cast) {} try { dynamic_cast<Triangle&>(*s); out << "Triangle" << endl; } catch (std::bad_cast) {} s->color().getRgb(&r, &g, &b, &a); out << r << ' ' << g << ' ' << b << ' ' << a << ' ' << s->pos().x() << ' ' << s->pos().y() << ' ' << s->size().width() << ' ' << s->size().height() << endl; } ``` - порассуждать как можно покраше написать серриализацю, десериализацию - раз уж в коде сплошь и рядом используется `noexcept`, рассказать про спецификатор `noexcept`, оператор `noexcept`, в чем отличие от спецификации исключений через `throw()`