我有std::variant
所有类都派生自同一个基础的地方。我想将变体转换为基础。
return std::visit( []( const Base& b ) { return b; }, v );
这会编译但会发出警告 C4172:返回局部变量或临时地址
有没有办法std::variant
就地访问,而无需制作本地或临时副本?
或者,如果不可能,我该如何将值转换为void*
我可以使用static_cast
?
更新:我认为这个例子应该很明显,但事实并非如此,这是完整的再现:
#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 );
}