#include <sigc++/sigc++.h>

/// This class emits a signal in its destructor
struct foo
{
        ~foo() { signal.emit(); }
        SigC::Signal0<void> signal;
};

/// This class deletes itself when it receives a signal
struct bar :
        public SigC::Object
{
        bar(foo& Foo)
        {
               Foo.signal.connect(SigC::slot(*this, &bar::closed));
        }

        void closed()
        {
		delete this;
        }
};

int main(int, char**)
{
	foo f;
        new bar(f);

	return 0;
}



#if defined(UNDER_CE) || (defined(_MSC_VER)&&defined(_DEBUG))

// see eVC4/README.txt

void helper()
{
    void (*proxy)(void*) = 0;
    bar* control = 0;
    void* object = 0;
    void (bar::*method)() = 0;

    SigC::ObjectSlotNode node( proxy, control, object, method);
}

SigC::ObjectSlotNode::ObjectSlotNode(FuncPtr proxy,bar* control, void* object, void (bar::*method)())
      : SlotNode(proxy)
      { init(control,object,reinterpret_cast<Method&>(method)); }

#endif




syntax highlighted by Code2HTML, v. 0.9.1