#include #include struct Base { virtual ~Base() = default; }; struct Derived : Base { int value = 7; }; struct Other : Base {}; int main() { Derived object; Base* base = &object; Derived* derived = dynamic_cast(base); assert(derived != nullptr && derived->value == 7); assert(dynamic_cast(base) == nullptr); int editable = 3; const int* read_only = &editable; *const_cast(read_only) = 4; const int whole = static_cast(3.75); assert(editable == 4 && whole == 3); std::cout << derived->value << ' ' << editable << ' ' << whole << '\n'; }