id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 9103,execution of slots on deletion of signals,wim@…,Frank Mori Hess,"This code: struct A { public: A() { sig.connect(0, boost::bind(&A::a, this)); sig.connect(1, &A::b); } void a() {delete this;} static void b() {std::cout << ""hello\n"";} boost::signals2::signal sig; }; A *a = new A; a->sig(); Does not print 'hello'. Yet, the documentation of boost.signals2 states: Signal/slot disconnections occur when any of these conditions occur: (1) The connection is explicitly disconnected via the connection's disconnect method directly, or indirectly via the signal's disconnect method, or scoped_connection's destructor. (2) An object tracked by the slot is destroyed. (3) The signal is destroyed. [Note: we're in case (3)] These events can occur at any time without disrupting a signal's calling sequence. If a signal/slot connection is disconnected at any time during a signal's calling sequence, the calling sequence will still continue but will not invoke the disconnected slot. Additionally, a signal may be destroyed while it is in a calling sequence, and which case it will complete its slot call sequence but may not be accessed directly. Since the slot is deleted in the calling sequence, I expect the calling sequence to continue, and 'hello' should be printed. This behaviour would be consistent with boost.signals (the deprecated version). ",Bugs,closed,Boost 1.56.0,signals2,Boost 1.54.0,Problem,fixed,,