
Hi Boosters, here is my review summary so far, in form of a TODO list and sketches how the next generation interface will look like. I hope I did not forget anything important. I used 'pof' (plain old functional, inspired by 'pod') in the naming to refer to what was previously called "function types". Not sure this - and the names in general - are good (pof gives a fine namespace name, though). Comments are welcome, of course! Thanks, Tobias Documentation: -------------- - revise text in respect to the reviewer's notes - inline examples, add short examples of typical use cases - add a tutorial - port to BoostBook on the fly Library: -------- - wrap interface in namespace, shorten/improve identifier names - cv-qualify class types of member function pointer - add unary (TypeTraits-style) traits for classification for most common cases - decorate member function pointers' class type in 'signature' with a reference by default - allow a placeholder name in calling conventions configuration to allow "explicitly empty" cc-attributation to address MSVC's '__thiscall' which cannot be specified explicity. - tag becomes the second (template-) parameter for tag-based metafunctions - improve tag logic by allowing combination of orthogonal aspects - simplify 'signature' by hiding most type members Synopsis (draft): ----------------- (lazy notation, all are class templates) // Classification is_function_ is_function_pointer is_function_reference is_member_function_pointer_ is_pof // true if one of the above is true is_unbound_pof // like is_pof but excludes member function pointers is<Tag_Or_Function_Or_Signature,Tag> // previously name: is_function_type // Decomposition arity // number of parameters of the function parameter[_c] // get a single parameter type class_ // class type of member function pointers (undecorated) parameters // MPL sequence of paramters signature<POF, ClassDecoration = add_reference<_> > // Seq. with all types effective_parameter[s/_c] // includes "this reference" (hard-wired) // Synthesis pof_type<Signature_or_Seq_or_POF // previous name: function_type (*1) ,Tag = unspecified,ClassDecoration = add_reference<_> > tag[_n]<Signature_or_Seq_or_POF // combined tag (*2) ,Tag1 [[= nil_t], Tag2 = [[nil_t], ...]] > (*1) tag< signature<T> > replaces typename function_type_signature<T>::kind (*2) pof_type< signature<T> > replaces typename function_type_signature<T>::representee