Consider the following case:
void Set(const std::function &fn); void Set(const std::function &fn);
I suggest:
void Set(void(*f)(int, int)) { std::function wrap(f); // ... } void Set(void(*f)(int)) { std::function wrap(f); // ... }