[Boost : icpc assignment operator compiler error with boost filter_iterator and filtered_graph

Hello, I have the following filter iterator working perfectly with gcc 4.7 and 4.9 as well (C++11 support) But when I compile my code with intel compiler 13.0.1 version I get the following error error: *implicitly generated assignment operator cannot copy: reference member* "my_func::G" ... Details: I am using a filtered_graph over Boost::adjacency_list as my graph type (Graph_t). The vertex_iterator (from graph_traits<Graph_t> .. provides iterator range to iterate over graph vertices. I have to assign each graph vertex an id (using property_maps) and group them together by applying filter_iterator over vertex iterator. example: suppose I want to create 4 subgroups of vertices. So I create a filter predicate which is passed to filter iterator which gives me iterators <fbegin, fend> satisfying the predicate. For FOUR such groups, I get 4 pairs of filter iterators. A vector stores such filter_iterator pairs. std::vector < pair <filter_iterator_t, filter_iterator_t> > my_vector //stores iterator pair. Here is the code: vertex_iterator vbegin, vend; boost::tie(vbegin, vend) = boost::vertices(G); for (int i=0; i<4; ++i) { //for each i, create a filter_pred object my_filter_pred <Graph> filter_pred(G, i) //now create begin and end filter iterators as follows auto fbegin = boost::make_filter_iterator< my_filter_pred<Graph>, vertex_iterator> (filter_pred, vbegin, vend) auto fend = boost::make_filter_iterator< my_filter_pred<Graph>, vertex_iterator> (filter_pred, vend, vend) //fbegin, fend are of type filter iterator //insert the iterator pair into vector my_vector.push_back( std::make_pair (fbegin, fend) ); } The predicate is below : template<typename Graph> struct my_filter_pred { public: my_filter_pred() { } my_filter_pred(Graph& _G, int _value) : G(_G), value(_value) { } template<typename vertex_t> bool operator() (vertex_t vertex) { //get property "p" of vertex in graph G auto p = get (mypropertytype, vertex, G); return (p.val == value); } private: Graph& G; } ERROR : error: implicitly generated assignment operator cannot copy: reference member "my_filter_pred <Graph>::G [with ... ]" I tried to provide my own assignment operator as below: my_filter_pred& operator=(const my_filter_pred& other) { if (this != &other) G = other.G; return *this; } But it gave the same icpc error for actual typedef graph which is below : error: implicitly generated assignment operator cannot copy: " implicit generation of boost::filtered_graph_base<Graph_t> " .... Please help what should I do in this case to work. main motive : is to have a container which stores <iterator, iterator> pair which satisfies a predicate. Filter iterator was the best choice i could have to apply different filter predicate to same vertex_iterator range vbegin, vend; Thanks Aniket Pugaonkar Aniket Pugaonkar
participants (2)
-
Aniket Pugaonkar