
Hi everybody, I was just going through the "File Dependency" example for the graph library and found this piece of code which is a very simple cycle detector: struct cycle_detector : public dfs_visitor<> { cycle_detector( bool& has_cycle) : _has_cycle(has_cycle) { } template <class Edge, class Graph> void back_edge(Edge, Graph&) { _has_cycle = true; } protected: bool& _has_cycle; }; It takes a reference and manipulates the externally declared variable hasCyle via that reference. I tried to change hasCylce to a "regular" member variable, and I just want to read it afterwards, like cycle_detector detector(); boost::depth_first_search(graph, boost::visitor(detector)); if (detector.foundCycles) { //do something } I also thought about giving the cycle detector other member variables, like a list of back edges that gets filled. However, I found that none of those variables gets set the right way, starting with the very simple "bool hasCycle" member. I guess there must be a reason why the person that made the example chose to use a reference, and it only works that way... any ideas why? Thanks a lot in advance.