A huge THANK YOU for this cleanup and getting rid of my 'TRANSLATOR_INHERIT' workaround. One request for using C++ style inline.
On the topic of 'C++ wizardry': While not completely straight-forward I think mfp_baseclass is small enough to get your head around it if needed. I mean half of it is remove_pointer which is part of type_traits and one of the prime examples when starting with template programming. The rest is hard to come up with (kudos that you did!), but that's what you get for hiding static members in derived classes. https://codereview.appspot.com/551780043/diff/573720045/lily/include/callback.hh File lily/include/callback.hh (right): https://codereview.appspot.com/551780043/diff/573720045/lily/include/callback.hh#newcode166 lily/include/callback.hh:166: typedef typename remove_pointer<decltype(strip_mfp (static_cast<T> (nullptr)))>::type type; I'd consider 'using type = ' instead which is more C++ style https://codereview.appspot.com/551780043/