The dreaded VC++ gotchas
I spent a great deal of time working through issues specifically related to my VC6 compiler. Having had to solve these issues myself, it seems proper that I describe them briefly for the benefit of those intending to use my program.
In-line function expansion ( /Ob1 switch )
Typical problem:
I first saw this error when trying to use both write_graphviz and read_graphviz functionality in my code. Notice it is a link error:
dfs2.obj : fatal error LNK1179: invalid or corrupt file: duplicate
comdat "?policies@?$iterator_adaptor@Vconst_iterator@ ...
Solution:
Select "Project Settings"/"C/C++" Tab/"Optimization" Category, and change from (default) "Disable" to "Only _inline". While in the dialog, take out Settings/"C/C++"/Debug Info:Program Database for "Edit & Continue", to avoid D2016 : '/ZI' and '/Ob1' that command-line options are incompatible.
Memory allocation limit ( /Zm switch )
At various times as I used different graph algorithms, I would get C1076: "compiler limit : internal heap limit reached." This has to be added directly to the C/C++ Preprocessor scroll window (for example, /Zm200).
Lack of Koenig lookup
The lack of Koenig lookup in VC6 shows up in different guises (see references). For example, in one line of my code:
std::transform(startEI,endEI,
std::back_inserter(vSignals),
GetSignalFunctor<G>(_g));
Missing std:: in transform causes error C2667: 'transform' : none
of 2 overload have a best conversion
Missing std:: in back_inserter causes fatal error C1001: INTERNAL
COMPILER ERROR
This also points to the need for incremental build/compile because multiple errors can occur in a line of template call.
Inadvertent mixing up edges and vertices in parameters
When property_maps are used, sometimes passing the wrong type (edge instead of vertex, or vice versa) will cause a fatal error C1001: INTERNAL COMPILER ERROR. Example :
_EdgeAttrMap[v]["label"]=signal; // edge accessed with vertex