C++ (Qt)
typedef boost::variant<short, int, long, float, double, std::string> var_t;
template<class T>
struct numeric : public boost::static_visitor<T>
{
template<class V>
T operator()( V val ) const
{
Да, здесь T - именно тот тип которым инициализирован вариант, это ценная возможность. Постарался разобраться как же он это делает, но увы, заблудился в дебрях макрух