Experimental implementation of subtype_dynamic_cast for boost::variant