
hello, How to determine the actual type of the object stored in a variant? struct S { virtual ~S() {} }; struct Deriv1 : public S { virtual ~Deriv1() {} }; struct Deriv2 : public S { virtual ~Deriv2() {} }; struct Deriv3 : public Deriv2 { virtual ~Deriv3() {} }; typedef boost::variant<S,Deriv1, Deriv2, Deriv3> my_variant_t; Deriv3 d3; struct print_type: public boost::static_visitor<> { template <typename T> void operator()(const T&) const { std::cout<< typeid(T).name() <<std::endl; } }; const S& s = d3; my_variant_t v = s; boost::apply_visitor( print_type(), v ); This prints S. Is it a truncated copy of d3 that is stored v? How do I construct v polymorphically so that the real object is stored? regards,