Index: breadth_first_search.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/graph/breadth_first_search.hpp,v
retrieving revision 1.50
diff -u -r1.50 breadth_first_search.hpp
--- breadth_first_search.hpp	23 Jun 2003 04:38:16 -0000	1.50
+++ breadth_first_search.hpp	25 Sep 2004 13:26:48 -0000
@@ -37,6 +37,7 @@
 #include <boost/graph/graph_concepts.hpp>
 #include <boost/graph/visitors.hpp>
 #include <boost/graph/named_function_params.hpp>
+#include <boost/ref.hpp>
 
 namespace boost {
 
@@ -66,18 +67,22 @@
   void breadth_first_visit
     (const IncidenceGraph& g,
      typename graph_traits<IncidenceGraph>::vertex_descriptor s,
-     Buffer& Q, BFSVisitor vis, ColorMap color)
+     Buffer& Q, BFSVisitor xvis, ColorMap color)
   {
+    typedef typename unwrap_reference<BFSVisitor>::type realBFSVisitor;
+
     function_requires< IncidenceGraphConcept<IncidenceGraph> >();
     typedef graph_traits<IncidenceGraph> GTraits;
     typedef typename GTraits::vertex_descriptor Vertex;
     typedef typename GTraits::edge_descriptor Edge;
-    function_requires< BFSVisitorConcept<BFSVisitor, IncidenceGraph> >();
+    function_requires< BFSVisitorConcept<realBFSVisitor, IncidenceGraph> >();
     function_requires< ReadWritePropertyMapConcept<ColorMap, Vertex> >();
     typedef typename property_traits<ColorMap>::value_type ColorValue;
     typedef color_traits<ColorValue> Color;
     typename GTraits::out_edge_iterator ei, ei_end;
 
+    realBFSVisitor& vis = static_cast<realBFSVisitor&>(xvis);
+
     put(color, s, Color::gray());             vis.discover_vertex(s, g);
     Q.push(s);
     while (! Q.empty()) {
@@ -103,8 +108,11 @@
   void breadth_first_search
     (const VertexListGraph& g,
      typename graph_traits<VertexListGraph>::vertex_descriptor s,
-     Buffer& Q, BFSVisitor vis, ColorMap color)
+     Buffer& Q, BFSVisitor xvis, ColorMap color)
   {
+    typedef typename unwrap_reference<BFSVisitor>::type realBFSVisitor;
+    realBFSVisitor& vis = static_cast<realBFSVisitor&>(xvis);
+
     // Initialization
     typedef typename property_traits<ColorMap>::value_type ColorValue;
     typedef color_traits<ColorValue> Color;
