From 7aa653d6058ba73fa8ffc0a8b83ee6701cdf6410 Mon Sep 17 00:00:00 2001 From: Jeremy Siek Date: Sun, 24 Sep 2000 00:41:40 +0000 Subject: [PATCH] VC++ fixes [SVN r7786] --- docs/known_problems.html | 44 +++++++++++++++ docs/trouble_shooting.html | 47 ++++++++++++++++ include/boost/graph/detail/adjacency_list.hpp | 55 +++++++++++++++---- 3 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 docs/known_problems.html create mode 100644 docs/trouble_shooting.html diff --git a/docs/known_problems.html b/docs/known_problems.html new file mode 100644 index 00000000..9a826332 --- /dev/null +++ b/docs/known_problems.html @@ -0,0 +1,44 @@ + + + +Known Problems + +C++ Boost + +
+ +

Known Problems

+ +
    +
  1. Visual C++ internal compiler error in adjacency_list.cpp and edge_plugin.cpp
  2. +
+ + +
+
+ + +
Copyright © 2000 +Jeremy Siek, +Univ.of Notre Dame (jsiek@lsc.nd.edu)
+Lie-Quan Lee, Univ.of Notre Dame (llee1@lsc.nd.edu)
+Andrew Lumsdaine, +Univ.of Notre Dame (lums@lsc.nd.edu) +
+ + + diff --git a/docs/trouble_shooting.html b/docs/trouble_shooting.html new file mode 100644 index 00000000..fbf062d8 --- /dev/null +++ b/docs/trouble_shooting.html @@ -0,0 +1,47 @@ + + + +Boost Graph Library: Trouble Shooting + +C++ Boost + +
+ +

Trouble Shooting

+ +
+error C2784: 'T __cdecl source(struct std::pair,const G &)' : could not deduce template argument for 'struct std::pair<_T1,_T1>' from 'class boost::detail::bidir_edge'
+
+ +VC++ does not support Koenig Lookup, therefore you need to refer to functions defined in the boost namespace +using the boost:: prefix, i.e., boost::source(e, g) instead of source(e, g). + + +
+
+ + +
Copyright © 2000 +Jeremy Siek, +Univ.of Notre Dame (jsiek@lsc.nd.edu)
+Lie-Quan Lee, Univ.of Notre Dame (llee1@lsc.nd.edu)
+Andrew Lumsdaine, +Univ.of Notre Dame (lums@lsc.nd.edu) +
+ + + diff --git a/include/boost/graph/detail/adjacency_list.hpp b/include/boost/graph/detail/adjacency_list.hpp index d3142d71..ee3acc60 100644 --- a/include/boost/graph/detail/adjacency_list.hpp +++ b/include/boost/graph/detail/adjacency_list.hpp @@ -41,6 +41,9 @@ // REVISION HISTORY: // // $Log$ +// Revision 1.12 2000/09/24 00:41:39 jsiek +// VC++ fixes +// // Revision 1.11 2000/09/22 07:11:07 jsiek // reorganized graph/detail/adjacency_list.hpp to handle g++ // inline friend in namespace bug and VC++ no Koenig lookup @@ -439,9 +442,10 @@ namespace boost { typename Config::vertex_descriptor v) { typedef typename Config::graph_type graph_type; + typedef typename Config::StoredEdge StoredEdge; graph_type& g = static_cast(g_); typename Config::OutEdgeList& el = g.out_edge_list(u); - boost::erase(el, typename Config::StoredEdge(v)); + boost::erase(el, StoredEdge(v)); } // O(V + E) for allow_parallel_edges @@ -452,10 +456,11 @@ namespace boost { typename Config::vertex_descriptor u) { typedef typename Config::graph_type graph_type; + typedef typename Config::StoredEdge StoredEdge; graph_type& g = static_cast(g_); typename Config::vertex_iterator vi, viend; for (boost::tie(vi, viend) = vertices(g); vi != viend; ++vi) - boost::erase(g.out_edge_list(*vi), typename Config::StoredEdge(u)); + boost::erase(g.out_edge_list(*vi), StoredEdge(u)); g.out_edge_list(u).clear(); // clear() should be a req of Sequence and AssociativeContainer, // or maybe just Container @@ -481,20 +486,30 @@ namespace boost { add_edge(directed_graph_helper& g_, typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, - const typename Config::edge_plugin_type& p - = typename Config::edge_plugin_type()) + const typename Config::edge_plugin_type& p) { typedef typename Config::edge_descriptor edge_descriptor; typedef typename Config::graph_type graph_type; + typedef typename Config::StoredEdge StoredEdge; graph_type& g = static_cast(g_); typename Config::OutEdgeList::iterator i; bool inserted; boost::tie(i, inserted) = boost::push(g.out_edge_list(u), - typename Config::StoredEdge(v, p)); + StoredEdge(v, p)); return std::make_pair(edge_descriptor(u, v, (*i).get_plugin()), inserted); } - + // Did not use default argument here because that + // causes Visual C++ to get confused. + template + inline std::pair + add_edge(directed_graph_helper& g_, + typename Config::vertex_descriptor u, + typename Config::vertex_descriptor v) + { + typename Config::edge_plugin_type p; + return add_edge(g_, u, v, p); + } //========================================================================= // Undirected Graph Helper Class @@ -612,6 +627,15 @@ namespace boost { } return std::make_pair(edge_descriptor(u,v), false); } + template + inline std::pair + add_edge(undirected_graph_helper& g_, + typename Config::vertex_descriptor u, + typename Config::vertex_descriptor v) + { + typename Config::edge_plugin_type p; + return add_edge(g_, u, v, p); + } // O(1) template inline typename Config::degree_size_type @@ -721,8 +745,7 @@ namespace boost { add_edge(bidirectional_graph_helper_with_plugin& g_, typename Config::vertex_descriptor u, typename Config::vertex_descriptor v, - const typename Config::edge_plugin_type& p - = typename Config::edge_plugin_type()) + const typename Config::edge_plugin_type& p) { typedef typename Config::graph_type graph_type; graph_type& g = static_cast(g_); @@ -744,6 +767,15 @@ namespace boost { return std::make_pair(edge_descriptor(u,v), false); } } + template + inline std::pair + add_edge(bidirectional_graph_helper_with_plugin& g_, + typename Config::vertex_descriptor u, + typename Config::vertex_descriptor v) + { + typename Config::edge_plugin_type p; + return add_edge(g_, u, v, p); + } // O(1) template inline typename Config::degree_size_type @@ -968,9 +1000,9 @@ namespace boost { const adj_list_helper& g_) { typedef typename Config::graph_type Graph; + typedef typename Config::edge_parallel_category Cat; const Graph& g = static_cast(g_); - return g_.edge_dispatch(g, u, v, - typename Config::edge_parallel_category()); + return g_.edge_dispatch(g, u, v, Cat()); } template inline std::pair inline void remove_vertex(vec_adj_list_impl& g_, typename Config::vertex_descriptor v) { + typedef typename Config::directed_category Cat; Graph& g = static_cast(g_); - remove_vertex_dispatch(g, v, typename Config::directed_category()); + remove_vertex_dispatch(g, v, Cat()); } // O(1) template