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
+
+
+
+
+
+ Known Problems
+
+
+ - Visual C++ internal compiler error in adjacency_list.cpp and edge_plugin.cpp
+
+
+
+
+
+
+
+
+
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
+
+
+
+
+
+ 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).
+
+
+
+
+
+
+
+
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