I need to get the bundled property map with a key_type of the vertex_descriptor and a value_type of the bundled vertex property type from a  compressed_sparse_row_graph by get(vertex_bundle, g), but it failed. It works when the graph is an adjacency_list.

  1 #include <iostream>
  2 #include <string>
  3 #include <boost/graph/graph_traits.hpp>
  4 #ifndef CSR
  5 #include <boost/graph/adjacency_list.hpp>
  6 #else
  7 #include <boost/graph/compressed_sparse_row_graph.hpp>
  8 #endif
  9 using namespace boost;
 10 using namespace std;
 11 struct City {
 12         string name;
 13         int population;
 14         int zipcode;
 15         explicit City(string const &n = "", int pop = 0, int zip = 0) : name(n), population(pop), zipcode(zip){}
 16 };
 17 struct Highway {
 18         string name;
 19         double miles;
 20         int speed_limit;
 21         explicit Highway(string const &n = "", double m = 0, int s = 0) : name(n), miles(m), speed_limit(s){}
 22 };
 23 #ifndef CSR
 24 typedef adjacency_list<listS, vecS, bidirectionalS, City, Highway> Graph;
 25 #else
 26 typedef compressed_sparse_row_graph<directedS, City, Highway> Graph;
 27 #endif
 28 int main(int argc, char* argv[])
 29 {
 30         City ct[3] = { City("Beijing", 20, 100000), City("Tianjin", 10, 200000), City("Shanghai", 18, 300000) };
 31         Highway hway[2] = { Highway("JJWay", 200, 100), Highway("JHWay", 1300, 120) };
 32         graph_traits<Graph>::vertex_iterator vi, vi_end;
 33 #ifndef CSR
 34         Graph map;
 35         Graph::vertex_descriptor v[3];
 36         v[0] = add_vertex(ct[0], map);
 37         v[1] = add_vertex(ct[1], map);
 38         v[2] = add_vertex(ct[2], map);
 39         add_edge(v[0], v[1], hway[0], map);
 40         add_edge(v[0], v[2], hway[1], map);
 41 #else
 42         typedef pair<size_t, size_t> Edge;
 43         Edge edges[2] = { Edge(0, 1), Edge(0,2) };
 44         Graph map(edges_are_unsorted, edges, edges + 2, hway, 3);
 45         int i = 0;
 46         for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi)
 47                 map[*vi] = ct[i++];
 48 #endif
 49         property_map<Graph, vertex_bundle_t>::type index = get(vertex_bundle, map);
 50         for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi)
 51                 cout<<index[*vi].name<<" \t"<<index[*vi].population<<" \t"<<index[*vi].zipcode<<endl;
 52         property_map<Graph, std::string City::*>::type Names = get(&City::name, map);
 53         for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi)
 54                 cout<<Names[*vi]<<endl;
 55 }
g++ test.cpp is OK
but g++ -DCSR test.cpp errors at line 49.