#include <iostream>
#include <string>
#include <boost/variant.hpp>
void foo( boost::variant<int,long,std::string> arg )
{
using namespace std;
cout << "foo: ";
switch( arg.which() ) {
case 0:
cout << "<int> " << boost::get<int>(arg) << endl;
break;
case 1:
cout << "<long> " << boost::get<long>(arg) << endl;
break;
case 2:
cout << "<string> " << boost::get<std::string>(arg) << endl;
break;
}
}
int main() {
foo( 1 );
foo( 2L );
foo( std::string("hello world") );
//foo( 3u ); // compile error
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKI2luY2x1ZGUgPGJvb3N0L3ZhcmlhbnQuaHBwPgoKdm9pZCBmb28oIGJvb3N0Ojp2YXJpYW50PGludCxsb25nLHN0ZDo6c3RyaW5nPiBhcmcgKQp7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwoKICAgIGNvdXQgPDwgImZvbzogIjsKICAgIHN3aXRjaCggYXJnLndoaWNoKCkgKSB7CiAgICBjYXNlIDA6CiAgICAgICAgY291dCA8PCAiPGludD4gIiA8PCBib29zdDo6Z2V0PGludD4oYXJnKSA8PCBlbmRsOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAgICAgIGNvdXQgPDwgIjxsb25nPiAiIDw8IGJvb3N0OjpnZXQ8bG9uZz4oYXJnKSA8PCBlbmRsOwogICAgICAgIGJyZWFrOwogICAgY2FzZSAyOgogICAgICAgIGNvdXQgPDwgIjxzdHJpbmc+ICIgPDwgYm9vc3Q6OmdldDxzdGQ6OnN0cmluZz4oYXJnKSA8PCBlbmRsOwogICAgICAgIGJyZWFrOwogICAgfQp9CgppbnQgbWFpbigpIHsKCiAgICBmb28oIDEgKTsKICAgIGZvbyggMkwgKTsKICAgIGZvbyggc3RkOjpzdHJpbmcoImhlbGxvIHdvcmxkIikgKTsKICAgIC8vZm9vKCAzdSApOyAvLyBjb21waWxlIGVycm9yCn0K