Как увеличить ссылки на хранилище вариантов?

Следующий код компилируется и делает «правильные вещи»:

#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 :: variant сохраняет ссылку? Согласно стандарту C ++, способ хранения ссылок полностью зависит от компилятора. Собственно, как boost :: variant вообще узнает, сколько байтов занято ссылкой? sizeof (T &) == sizeof (T) , поэтому он не может использовать оператор sizeof () . Я знаю, что ссылки, скорее всего, реализованы как указатели, но в языке нет гарантии. Хорошее объяснение того, как get <> и посещение работает, когда вариант хранит ссылки, получают дополнительные баллы :)

13
задан Björn Pollex 31 January 2014 в 15:06
поделиться