
but this works:
namespace std
{ template <typename T1, typename T2> std::ostream& operator<<(std::ostream& os, const boost::variant<boost::WR1<T1>, boost::WR2<T2> >& v) { if ( boost::get<boost::WR1<T1> >( &v ) ) os << boost::get<WR1<T1> >( v )._data; else os << boost::get<WR2<T2> >( v )._data; return os; } }
It seems the same case.
This seems to be a SFINAE problem. Is it possible, that graph_traits<union_graph<...>>::vertex_descriptor or edge_descriptor does not name an actual type? For example, did you misspell the type names inside the union_graph class? I've had that problem before (it took an hour to figure it out). There's also a possibility that the compiler is choking on the complexity of the parameterization. You are using a slightly dated compiler. Any chance you can upgrade? Andrew Sutton andrew.n.sutton@gmail.com