What about return values?

If you only ever have one slot connected to a signal, or if you only care about the return value of the last registered one, it's quite straightforward:

sigc::signal<int> somesignal;
int a_return_value;

a_return_value = somesignal.emit();

If you care about every return value things are a little more complicated. See the section on Marshallers for more info.