It makes use of variadic templates and auto return type deduction so the compiler must be C++14 compliant.

To illustrate why it was needed consider this: Sometimes there are several overloads for a given function and then it’s not enough to just specify &Class::functionName because the compiler does not know which overload to choose.

Without changing the signal we can also connect the second overload foo(int, float):

// This one only works because int can be coerced into float!
s.connect(&amb,sigs::Use<int,float>::overloadOf(&Ambiguous::foo));s(12,34);/* Prints:
Ambiguous::foo(int, int)
Ambiguous::foo(int, float)
*/