Iterating over the types in a boost::variant

boost, boost-variant, c++, iterator

Solution

`boost::variant` exposes its types via `types`, which is an MPL list. You can do runtime operations over MPL lists using mpl::for_each:

struct printer {
    template<class T> void operator()(T t) {
        std::cout << typeid(T).name() << std::endl;
    }
};

// ... 
typedef boost::variant<int, char> var;
boost::mpl::for_each<var::types>(printer());

Problem

I'm using a boost variant to hold some generated types, right now my code generator creates a header with the types and a variant capable of holding them. At initialization time, I'd like to iterate over the allowable types in the variant, not the types the variant is holding at the moment. Can I do this with a variant?

Original source