C++ Boost

Trouble Shooting


With GNU C++, if you see the following error message:
boost/type_traits/arithmetic_traits.hpp:243: template instantiation depth exceeds maximum of 17
boost/type_traits/arithmetic_traits.hpp:243:  (use -ftemplate-depth-NN to increase the maximum)
then you need to do as the error message advises and increase the template instantiation depth. Passing the flag -ftemplate-depth-30 to g++ usually does the trick.
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).


../../..\boost/property_map.hpp(283) : error C2678: binary '[' : no operator defined
 which takes a left-hand operand of type 'const struct boost::adj_list_edge_property_map,unsigned int,enum boost::edge_weight_t>' (or there is no acceptable conversion)

There is a VC++ bug that appears when using get(property, graph, edge). A workaround is to use get(get(property, graph), edge) instead.


C:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\xmemory(59) : fatal
error C1001: INTERNAL COMPILER ERROR
        (compiler file 'msc1.cpp', line 1786)

There can be many reasons for this error, but sometimes it is caused by using the flag /Gm (minimal rebuild). As this flag is not really necessary, it is a good idea to turn it off.

Another reason for the error can be the use of the named-parameter interface for many of the BGL algorithms. Try using the non named-parameter version of the algorithm instead (see the HTML docs for the algorithm in question).

Yet another reason can be the use of the get() function of the PropertyGraph interface. Instead of using the get() function in a complex expression, always declare a property map variable first:

property_map<graph_t, edge_weight_t>::type w_map = get(edge_weight, g);
// use w_map ...

V:\3rdPARTY\SXL\INCLUDE\xlocnum(309) : error C2587: '_U' : illegal
 use of local variable as default parameter

Workaround from Andreas Scherer:
That's the usual problem with MSVC-- 6.0 sp[34] when compiling some (or all?) of the BGL examples. You can't use the DLL version of the run-time system. I succeeded in compiling file_dependencies.cpp after switching to ``[Debug] Multithreaded'' (section ``Code Generation'' on page ``C/C++'' in the ``Project Settings'').

Another reason for this error is when the iterator constructor of an adjacency_list is used. The workaround is to use add_edge() instead. Replace something like this:

Graph g(edge_array, edge_array + n_edges, N);
with something like this:
Graph g(N);
for (std::size_t j = 0; j < n_edges; ++j)
  add_edge(edge_array[j].first, edge_array[j].second, g);



Copyright © 2000-2001 Jeremy Siek, Indiana University (jsiek@osl.iu.edu)
Lie-Quan Lee, Indiana University (llee@cs.indiana.edu)
Andrew Lumsdaine, Indiana University (lums@osl.iu.edu)