<HTML>
<!--
     Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
    
     Distributed under the Boost Software License, Version 1.0.
     (See accompanying file LICENSE_1_0.txt or copy at
     http://www.boost.org/LICENSE_1_0.txt)
  -->
<Head>
<Title>Known Problems</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
        ALINK="#ff0000">
<IMG SRC="../../../boost.png"
     ALT="C++ Boost" width="277" height="86">

<BR Clear>

    <h1>Known Problems and Workarounds</h1>

This is a list of known problems compiling the BGL for different compilers and
versions.

<ol>
  <li>The <code>subgraph</code> adaptor has several known problems:
    <ul>
      <li>Each instance of subgraph has its own copy of internal
      vertex and edge properties. Only at the root subgraph are the
      properties valid. </li>

      <li>Edge and vertex removal functions are unimplemented.</li>

      <li>The graph is required to have vertex descriptors of integral
      type (that are the same as the vertex index). Practically
      speaking, that means subgraph only applies to adjacency lists
      with <code>VertexListS</code> = <code>vecS</code>.</li>
    </ul></li>

  <li>The <code>EdgeListS</code> parameter to the adjacency list is
  essentially fixed to <code>listS</code>: other selectors are
  unlikely to work.</li>

  <li>Using a GraphProperty with adjacency_list may cause a VC++ internal compiler error.</li>
  <li>Using get(property, graph, edge) may cause a VC++ internal compiler error.</li>
  <li>&quot;using boost::tie;&quot; may cause VC++ internal compiler error.
</ol>

<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy; 2000-2001</TD><TD>
<A HREF="http://www.boost.org/people/jeremy_siek.htm">Jeremy Siek</A>,
Indiana University (<A
HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br>
<A HREF="http://www.boost.org/people/liequan_lee.htm">Lie-Quan Lee</A>, Indiana University (<A HREF="mailto:llee@cs.indiana.edu">llee@cs.indiana.edu</A>)<br>
<A HREF="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</A>,
Indiana University (<A
HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>)
</TD></TR></TABLE>

</BODY>
</HTML>
