This appears to be not included in boost.
However, with the help of this answer, we can simply role our own:
template<int N, typename... Ts> using NthTypeOf =
typename std::tuple_element<N, std::tuple<Ts...>>::type;
template<int N, typename... Ts>
auto &get(boost::variant<Ts...> &v) {
using target = NthTypeOf<N, Ts...>;
return boost::get<target>(v);
}
template<int N, typename... Ts>
auto &get(const boost::variant<Ts...> &v) {
using target = NthTypeOf<N, Ts...>;
return boost::get<target>(v);
}
int main () {
boost::variant<int, double> v = 3.2;
std::cout << get<1>(v);
}
See it live.
The pointer overloads can of course be added analogously if desired.
<variant>
yet... so C++14 (also latest boost) – Leyva