id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 1007,boost::signals::trackable::operator= bug,anonymous,Douglas Gregor,"Boost: 1.34.0 Compiler: MSVC 8.0 (without SP1). Here is, minimal example. struct Conn : public boost::signals::trackable { void operator()(){} }; void f() { boost::signal sig; Conn c; sig.connect( c ); c = Conn(); // crash inside.. } The reason is simple. During clear() method of std::list, there are signals::connection destructor calls are happening, which, in turn, calling erase method of the same std::list, and as a result we're getting _DEBUG_ERROR(""list erase iterator outside range""); I guess, the bug is with ""dying"" variable: in destructor, it was set to true, and then signals::connection destructors are not trying to remove themself from the std::list. But in boost::signals::trackable::operator=() there is no dying flag marking. Evgeny. ",Bugs,closed,,signals,Boost 1.34.0,Problem,fixed,,