Следующий код компилирует и делает "правильные вещи":
#include <boost/variant.hpp>
#include <iostream>
int main()
{
int a = 10;
boost::variant<int&, float&> x = a;
a = 20;
std::cout << boost::get<int&>(x) << "\n";
return 0;
}
Как Boost :: Вариант хранит ссылку? В соответствии со стандартом C ++ способ хранения ссылок полностью зависит от компилятора. На самом деле, как boost::variant
узнает, сколько байтов занято ссылкой? sizeof(T&) == sizeof(T)
, поэтому нельзя использовать оператор sizeof()
. Теперь я знаю, что ссылки, скорее всего, реализованы как указатели, но в языке нет никаких гарантий. Хорошее объяснение того, как get<>
и посещение работают, когда вариант хранит ссылки, получают дополнительные очки:)