Проблема здесь в том, что вы запрашиваете текущее значение, хранящееся во время выполнения , тогда как сигнатура функции экземпляра шаблона выполняется во время компиляции .Рассмотрите, как выглядит функция-член, когда вы пытаетесь использовать ее для получения double
:
double fun() {
if (/* ... */)
return std::get<double>(cont); // Ok return type is double, too
else if (/* ... */)
return std::get<std::string>(cont); // Error, return type should be string?!
}
Это не может работать.Вам нужно изменить способ доступа к элементу данных, например, передавая перегрузку, установленную на std::visit
, предоставив две функции, подобные геттеру, возвращающие std::optional<double>
и std::optional<std::string>
или что-то подобное.