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 );
}