
Hi, i would like to use the bundled properties feature of the boost graph library to specify the vertex properties of my graph. The problem is that i would like to have some graph type dependent descriptor type map defined within these vertex properties. Here is the example: // begin code #include <iostream> #include <boost/graph/adjacency_list.hpp> struct vertex_properties { vertex_properties () : color (-1) {} int color; std::list <int> free_colors; std::map<int,link_graph_traits::edge_descriptor> used_colors; // this is a cycle def problem }; struct edge_properties { edge_properties () : color (-1) {} int color; }; struct graph_properties { int delta; }; typedef boost::adjacency_list < boost::listS, boost::vecS, boost::bidirectionalS, vertex_properties,// this is a cycle problem edge_properties, graph_properties> link_graph; typedef boost::graph_traits <link_graph> link_graph_traits; int main(int argc, char** argv) { link_graph g; return 0; } // end code This example won't compile because the 'struct vertex_properties' contains a variable declaration of a std::map which contains the type ('link_graph_traits::edge_descriptor') as a template parameter that is not defined yet. I tried to forward declare the 'struct vertex_properties;' and move the definition of 'struct vertex_properties {...};' behind the graph type definition but then the compiler complained about. The forward declaration code, that does not compile, too follows: // begin code #include <iostream> #include <boost/graph/adjacency_list.hpp> struct vertex_properties; struct edge_properties { edge_properties () : color (-1) {} int color; }; struct graph_properties { int delta; }; typedef boost::adjacency_list < boost::listS, boost::vecS, boost::bidirectionalS, vertex_properties, edge_properties, graph_properties> link_graph; typedef boost::graph_traits <link_graph> link_graph_traits; struct vertex_properties { vertex_properties () : color (-1) {} int color; std::list <int> free_colors; std::map <int, link_graph_traits::edge_descriptor> used_colors; }; int main(int argc, char** argv) { link_graph g; return 0; } // end code I do not want to use (void*) and std::reinterpret_cast to work around this problem. I hope that you can help me with a technique not using casts. I assume that there may be a possibility to first declare the graph type without the vertex_properties struct and then 'adding' the vertex_propterties struct after defining the graph. best regards Christoph