I’am trying to learn boost.variant. However, the code which I copied from a book won’t pass the compilation:
class var_print : public boost::static_visitor<void>
{
public:
template<typename T>
void operator()(T &i) {
i *= 2;
cout<<i<<endl;
}
};
Here is how I tried to use it.
typedef boost::variant<int,double,string> var_t;
var_t v(1); //v->int
boost::apply_visitor(var_print(),v);
The compiler generates the following error:
ERROR:no match for ‘operator*=’ in ‘i *= 2’
That puzzles me,since template function will determine the type of parameter whenever it’s called and int should defined the operator *=.
You need to have a separate
operator()forstd::string&since no operator*=is defined forstd::string.In addition, your operator must be marked
constsince you are passing a temporar visitor instance toapply_visitor.