
If you can post your full implementation, I'll run it through GCC and see if the error persists, or if there's a nicer way to fix it.
In my previous post I've attached the "workaround" code. If you want to replicate the problem, please substitute the following code in union_graph.hpp: template <typename T1, typename T2> bool operator!=( variant<WR1<T1>, WR2<T2> >& left, variant<WR1<T1>, WR2<T2> >& right ) { return !( left == right ); } with my previous version of operator!=() template <typename Graph1, typename Graph2> inline bool operator!=( const typename boost::graph_traits< boost::union_graph<Graph1, Graph2> >::edge_descriptor& left, const typename boost::graph_traits< boost::union_graph<Graph1, Graph2> >::edge_descriptor& right ) { return !( left == right ); } Cosimo Calabrese