Нужно было разобраться с использованием boost::variant
Также имеется функция std::get_if, которая принимает указатель на std::variant и возвращает указатель на текущее значение, если тип был указан правильно, и nullptr в противном случае:
Обычно более удобным способом работы с std::variant является std::visit: