#include <iostream>
#include "boost/variant.hpp"
struct A {};
struct B {};
typedef boost::variant<A, B> AorB;
void foo(A&) { std::cout << "foo(A&)\n"; }
void foo(B&) { std::cout << "foo(B&)\n"; }
int main()
{
A a;
AorB c;
c = a;
foo(boost::get<A>(c));
try
{
foo(boost::get<B>(c));
}
catch(boost::bad_get& e)
{
std::cout << e.what();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSAiYm9vc3QvdmFyaWFudC5ocHAiCgpzdHJ1Y3QgQSB7fTsKc3RydWN0IEIge307Cgp0eXBlZGVmIGJvb3N0Ojp2YXJpYW50PEEsIEI+IEFvckI7Cgp2b2lkIGZvbyhBJikgeyBzdGQ6OmNvdXQgPDwgImZvbyhBJilcbiI7IH0Kdm9pZCBmb28oQiYpIHsgc3RkOjpjb3V0IDw8ICJmb28oQiYpXG4iOyB9CgppbnQgbWFpbigpCnsKICBBIGE7CiAgQW9yQiBjOwogIGMgPSBhOwogIGZvbyhib29zdDo6Z2V0PEE+KGMpKTsKICB0cnkKICB7CiAgICBmb28oYm9vc3Q6OmdldDxCPihjKSk7CiAgfQogIGNhdGNoKGJvb3N0OjpiYWRfZ2V0JiBlKQogIHsKICAgIHN0ZDo6Y291dCA8PCBlLndoYXQoKTsKICB9Cn0=