У меня есть std::variant
, где все классы получены из одной базы.Я хочу привести вариант к базе.
return std::visit( []( const Base& b ) { return b; }, v );
Компилируется, но выдает предупреждение C4172: возврат адреса локальной переменной или временной
Есть ли способ посетить std::variant
на месте, безделать локальные или временные копии?
Или, если это невозможно, как я могу привести значение к void*
, чтобы я мог использовать static_cast
?
Обновление: Iдумал, что пример должен быть очевидным, но это не так, вот полное повторение:
#include <variant>
struct Base {};
struct A : Base {};
struct B : Base {};
const Base& cast( const std::variant<A, B>& v )
{
return std::visit( []( Base const& b ) { return b; }, v );
}
int main()
{
std::variant<A, B> v{ A{} };
const auto& b = cast( v );
}