Boost logo

Boost :

From: Eelis van der Weegen (gmane_at_[hidden])
Date: 2005-02-06 11:12:21


I've stumbled upon a strange bug in the graph library. It seems that swapping an
undirected adjacency_list back and forth to a copy of itself somehow causes some
internal damage that becomes apparent when observing adjacenct vertices. I've
attached a testcase that shows the problem. I'm using Boost 1.32 with gcc 3.4.2.

Regards,

Eelis


#include <algorithm>
#include <iterator>
#include <iostream>

#include <boost/graph/adjacency_list.hpp>

int main ()
{
  typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS> G;

  G g (3);

  add_edge(0, 1, g);
  add_edge(0, 2, g);

  G::adjacency_iterator i, j;
  boost::tie(i, j) = adjacent_vertices(0, g);

  std::copy(i, j, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
    // Prints "1 2", as it should.

  {
    // This should not alter g:
    G t = g;
    g.swap(t);
    g.swap(t);
  }

  boost::tie(i, j) = adjacent_vertices(0, g);

  std::copy(i, j, std::ostream_iterator<int>(std::cout, " "));
  std::cout << std::endl;
    // Prints "1 2 1 2", while it should still be "1 2".
}


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk