The only thing that I dislike is actually that C++ is inconsistent in its requirements to add an ampersand before non static member functions in contrast to static ones and free functions in order to assign them to a function pointer, but I might be overlooking something. Maybe in a future version of C++ this requirement will be dropped and we can write listeners.call (Listener::foo, bar) which would be beautiful code to me.