------- Comment #2 from redi at gcc dot gnu dot org 2010-07-05 23:26 ------- unpreprocessed source (because preprocessed boost source is so dependent on compiler version it often won't compile with other versions)
#include <boost/intrusive/list.hpp> struct A : public boost::intrusive::list_base_hook<> { virtual ~A() {} }; template<class X> struct D : A { X x; D(const X& x) : x(x) {} }; typedef boost::intrusive::list<A> A_list; struct data_holder { A_list a; template<class C> static void delete_disposer(C* c){ delete c; } template<class X> D<X>* insert(const X& x){ D<X> *t = new D<X>(x); a.push_back(*t); return t; } template<class X> void remove(D<X>* t){ A_list::iterator it = A_list::s_iterator_to(*t); a.erase_and_dispose(it, delete_disposer<A>); } }; int main() { data_holder data; D<int> *i = data.insert(10); data.remove(i); return 0; } This ICEs with Boost 1.39 or current Boost trunk, using any of 4.5.1, 4.6.0 or Fedora 4.4.3 -- redi at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Known to fail| |4.4.4 4.5.1 4.6.0 Last reconfirmed|0000-00-00 00:00:00 |2010-07-05 23:26:24 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44827