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();