I'm using boost::variant in the following manner
 
 
struct Visitor : boost::static_visitor<>
{
    void operator()(int &i) const
    {
        i = 1;
    }
};
 
boost::variant<int, char> var = 0;
 
boost::apply_visitor(Visitor(), 0);
 
 
I'm trying to get the program to compile if the variant takes on the guise of an int (because I've implemented void operator()(int &i) const, but not compile if I make the variant take the guise of a char e.g. boost::variant<int, char> var = 'a'; because I've not implemented the void operator()(char &c) const
 
Can anyone think of a way of doing this, maybe using SFINAE (Substitution Failure Is Not An Error)
 
I'm thinking of doing something along the lines of :
 
template <typename T>
struct SetObj;
 
template <>
struct SetObj<int>
{
     void operator()(int &obj) const
     {
           obj = 1;
     }
}
 
struct Visitor : boost::static_visitor<>
{
     template <typename T>
     void operator()(T& obj) const
     {
          SetObj<T>()(obj);
     }
};
 
But not sure how to take it to the next level to get the desired behaviour.


Add other email accounts to Hotmail in 3 easy steps. Find out how.