Boost logo

Boost Users :

From: Nicholas Burlett (nrb23_at_[hidden])
Date: 2004-04-20 18:29:17


I'm rather unsure about what is causing this, but I get an internal
compiler error in Visual C++ 7.1 when using BGL in some specific
circumstances.

I have a graph defined in class Graph defined as such:

  typedef property<edge_feedback_t, bool> EdgeFeedback;
     typedef property<edge_sourcejack_t, IAudioOutputJack*,
EdgeFeedback> EdgeSourceJack;
     typedef property<edge_destinationjack_t, IAudioInputJack*,
EdgeSourceJack> EdgeDestinationJack;
     typedef EdgeDestinationJack EdgeProperty;
     typedef boost::property<boost::vertex_index_t, int> VertexIndexProp;
     typedef property<vertex_name_t, nsCOMPtr<IAudioModule>,
VertexIndexProp> VertexProperty;
     typedef adjacency_list<listS, listS, bidirectionalS,
VertexProperty, EdgeProperty> graphdata;
     typedef graph_traits < graphdata >::vertex_descriptor vertdsc;

This definition works fine in the graph.cpp file that implements the
class Graph.

However, when I use graph.h in another cpp file, I get bizarre compiler
errors:
c:\Boost\include\boost
-1_31\boost\mpl\aux_\preprocessed\plain\apply.hpp(50) : fatal error
C1001: INTERNAL COMPILER ERROR

After some trial and error, I narrowed the problem down to needing to
have a != between two oedge_iterators _somewhere_ in the cpp file
including graph.h. Simply putting the following function into my other
files will cause them to compile just fine:

void makeVChappy()
{
     typedef graph_traits< Graph::graphdata >::out_edge_iterator
oedge_iterator;
     oedge_iterator oiter, oend;
     oiter != oend;
}

I'm a a complete loss as to how this could be happening, but since I
have a work-around for now, I'm not going to push the issue too much
further at the moment --- I just thought I'd bring this to your
attention, and see if anyone knows of a more elegant solution.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net