#include <iostream>
#include <memory>

class O {
public:
    virtual std::string type_name() { return typeid(*this).name(); }
    virtual ~O() {}
};

class C: public O {};

int main() {
    std::unique_ptr<O> varb { new C() };
    std::cout << varb->type_name();
}
