Boost logo

Boost Users :

From: Joe (joepubber_at_[hidden])
Date: 2007-08-10 09:33:21


Hi,

Can someone help me. I have defined a boost::variant<long
long,double,std::string> with a visitor which issues an increment. The
visitor derived class below works fine for std::string and long long only
within the visitor, but as soon as I add a double, I get an ambiguous call
compile error (error below). I'm guessing when T within the prop_increment
class is an int, the compiler doesn't know whether to use the long long
version of the operator() or the double version. Does anyone know how I can
get around this when I apply the visitor? Interestingly enough, if I add an
int to the boost::variant template list the error goes away.

------ Compile Error ------
Error 44 error C2668:
'boost::detail::variant::make_initializer_node::apply<BaseIndexPair,Iterator>::initializer_node::initialize'
: ambiguous call to overloaded function \boost\variant\variant.hpp 1273
-----------------------------

------ Visitor Class -----------
class prop_increment : public boost::static_visitor<> {
public:

    template <typename T, typename U>
    void operator()( T &, const U & ) const
    {
        return;
    }

     template<typename T>
     void operator()(T & lhs, const T& rhs) const {
         lhs += rhs;
     }
};

------------------------------------

boost::apply_visitor(prop_increment(),prop1,prop2);

---- Visitor Call -------------------

Thanks


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net