In some situations it\'s desirable to be able to type-erase a callable (e.g. function, function pointer, object instance with operator(), lambda, mem_fn>
Impossible. You may be able to take the address of operator() for some types, but not for an arbitrary callable, because it may well have overloads or template parameters. Whether or not it would work for a lambda is most assuredly not well-defined, AFAIK.