#include #include #include #include namespace Core { class AutoConverter { std::tr1::shared_ptr t_; public: AutoConverter(std::tr1::shared_ptr const & t) : t_(t) {} template operator C () { try { boost::any & a = (*t_); return boost::any_cast(a); } catch(boost::bad_any_cast & e) { std::cerr << "Internal conversion bug: " << "Failed to convert data holder to " << typeid(C).name() << "\n" << e.what() << std::endl; C c = C(); return c; } } }; inline AutoConverter Demo() { std::tr1::shared_ptr p_result (new boost::any(std::tr1::make_tuple(1, 2, 3, 4))); return p_result; } } // namespace Core int main() { std::tr1::tuple test = Core::Demo(); return 0; }