On 2020/04/19 10:55:52, dak wrote: > On 2020/04/19 09:55:03, hahnjo wrote: > > On 2020/04/19 09:39:00, dak wrote: > > > > > > 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; > > > On 2020/04/19 09:22:44, hahnjo wrote: > > > > I'd consider 'using type = ' instead which is more C++ style > > > > > > I think you overestimate my C++ fu. Can you spell this out? > > > > using type = typename remove_pointer<decltype(strip_mfp (static_cast<T> > > (nullptr)))>::type; > > to declare the type alias: > https://en.cppreference.com/w/cpp/language/type_alias > > I see. Basically squeezing in another piece of syntax where it has no sensible > place in order to have a variant of typedef that also works for template > specialisation of types. Or in other words, more C++ style. I have the vague > impression that the ability to do template specialisation on typedefs would also > be able to solve part of the job here in a more elegant manner but right now my > brain objects to more C++ style.
Yes, I had the same feeling. However I think that the current solution works because the template arguments are deduced from the function argument. I don't currently see a way to make this work with template <> using type =, but that would certainly be nice (and remove the need of using decltype and remove_pointer). https://codereview.appspot.com/551780043/