
Hi everyone, I'm having trouble with BGL's (Boost 1.33.1) topological sort. In my source code I have this simple call: std::vector<my_vertex> rev_topo_order; topological_sort(*t, std::back_inserter(rev_topo_order)); Here "t" is an iterator to a list of graphs declared like this: typedef boost::adjacency_list< boost::setS, // Out edge list type boost::listS, // Vertex list type boost::bidirectionalS, // Needed for DAG, topo sort my_property_bundle // Vertex properties > my_graph_type; The error trace below is mostly gobbledygook to me, but it looks like it's running into trouble with BGL's default bgl_named_params. The call chain runs through this curious bit of code: template <typename VertexListGraph, typename OutputIterator> void topological_sort(VertexListGraph& g, OutputIterator result) { topological_sort(g, result, bgl_named_params<int, buffer_param_t>(0)); // bogus } That looks...interesting to me. What's with the "bogus" comment? Any idea what's going on here? Any more information I can provide that would be helpful? The gmane archives show that Renaud Lepere ran into this problem in August '06 but I can't find any replies to his question. He gave a small example which I've confirmed reproduces the problem with g++ 4.1.2: #include <boost/graph/graph_traits.hpp> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/depth_first_search.hpp> #include <boost/graph/visitors.hpp> #include <boost/graph/topological_sort.hpp> #include <iterator> typedef boost::adjacency_list<boost::vecS, boost::listS, boost::bidirectionalS, int, int > Graph; typedef boost::graph_traits<Graph>::vertex_descriptor Vertex; typedef std::vector< Vertex > Vertices; int main() { Graph g; Vertices vs; boost::topological_sort(g, back_inserter(vs)); } Thanks for any help you can give. -Dave ---------------------- Error trace ---------------------- ./boost-1_33_1/boost/property_map.hpp: In member function 'R boost::iterator_property_map<RandomAccessIterator, IndexMap, T, R>::operator[](typename boost::property_traits<IndexMap>::key_type) const [with RandomAccessIterator = __gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, IndexMap = boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, T = boost::default_color_type, R = boost::default_color_type&]': ./boost-1_33_1/boost/property_map.hpp:319: instantiated from 'void boost::put(const boost::put_get_helper<Reference, PropertyMap>&, K, const V&) [with PropertyMap = boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>, Reference = boost::default_color_type&, K = void*, V = boost::default_color_type]' ./boost-1_33_1/boost/graph/depth_first_search.hpp:197: instantiated from 'void boost::depth_first_search(const VertexListGraph&, DFSVisitor, ColorMap, typename boost::graph_traits<G>::vertex_descriptor) [with VertexListGraph = boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, DFSVisitor = boost::topo_sort_visitor<std::back_insert_iterator<std::vector<void*, std::allocator<void*> > > >, ColorMap = boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>]' ./boost-1_33_1/boost/graph/depth_first_search.hpp:246: instantiated from 'static void boost::detail::dfs_dispatch<boost::detail::error_property_not_found>::apply(const VertexListGraph&, DFSVisitor, Vertex, const boost::bgl_named_params<P, T, R>&, boost::detail::error_property_not_found) [with VertexListGraph = boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, Vertex = void*, DFSVisitor = boost::topo_sort_visitor<std::back_insert_iterator<std::vector<void*, std::allocator<void*> > > >, P = boost::topo_sort_visitor<std::back_insert_iterator<std::vector<void*, std::allocator<void*> > > >, T = boost::graph_visitor_t, R = boost::bgl_named_params<int, boost::buffer_param_t, boost::no_property>]' ./boost-1_33_1/boost/graph/depth_first_search.hpp:324: instantiated from 'void boost::depth_first_search(const VertexListGraph&, const boost::bgl_named_params<P, T, R>&) [with VertexListGraph = boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, P = boost::topo_sort_visitor<std::back_insert_iterator<std::vector<void*, std::allocator<void*> > > >, T = boost::graph_visitor_t, R = boost::bgl_named_params<int, boost::buffer_param_t, boost::no_property>]' ./boost-1_33_1/boost/graph/topological_sort.hpp:64: instantiated from 'void boost::topological_sort(VertexListGraph&, OutputIterator, const boost::bgl_named_params<P, T, R>&) [with VertexListGraph = boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, OutputIterator = std::back_insert_iterator<std::vector<void*, std::allocator<void*> > >, P = int, T = boost::buffer_param_t, R = boost::no_property]' ./boost-1_33_1/boost/graph/topological_sort.hpp:70: instantiated from 'void boost::topological_sort(VertexListGraph&, OutputIterator) [with VertexListGraph = boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, OutputIterator = std::back_insert_iterator<std::vector<void*, std::allocator<void*> > >]' [ User code instantiations snipped] ./boost-1_33_1/boost/property_map.hpp:349: error: no match for 'operator+' in '((const boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>*)this)->boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>::iter + boost::get [with PropertyMap = boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, Reference = const boost::detail::error_property_not_found&, K = void*](((const boost::put_get_helper<const boost::detail::error_property_not_found&, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t> >&)((const boost::put_get_helper<const boost::detail::error_property_not_found&, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t> >*)(&((const boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>*)this)->boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::default_color_type*, std::vector<boost::default_color_type, std::allocator<boost::default_color_type> > >, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS, myclass::my_property_bundle, boost::no_property, boost::no_property, boost::listS>, boost::detail::error_property_not_found, const boost::detail::error_property_not_found&, boost::vertex_index_t>, boost::default_color_type, boost::default_color_type&>::index))), ((void* const&)((void* const*)(& v))))' ./lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_iterator.h:703: note: candidates are: __gnu_cxx::__normal_iterator<_Iterator, _Container> __gnu_cxx::__normal_iterator<_Iterator, _Container>::operator+(const typename std::iterator_traits<_Iter>::difference_type&) const [with _Iterator = boost::default_color_type*, _Container = std::vector<boost::default_color_type, std::allocator<boost::default_color_type> >] ./lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h:353: note: std::_Bit_const_iterator std::operator+(ptrdiff_t, const std::_Bit_const_iterator&) ./lib/gcc/i686-pc-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/stl_bvector.h:267: note: std::_Bit_iterator std::operator+(ptrdiff_t, const std::_Bit_iterator&)