
I only just now subscribed to this list so forgive me if this has been suggested and rejected before. Currently function_traits<F> exposes the argument types for F as individual typedefs, arg1_type, arg2_type, etc. I think this could be made more powerful with two changes: 1. First, change it to be 0 indexed, arg0_type should be first. This is more consistent with the rest of boost and C++ in general. 2. Have an inner arg struct, templated over an integer indicating which argument you want. So instead of: typedef some_type arg0_type; typedef some_other_type arg1_type; //... You would have: template<int i> struct arg template<> struct arg<0> { typedef some_type type; } template<> struct arg<1> { typedef some_other_type type; } // etc. I think this would make function_traits more usable for metaprogramming. As is, to access the different argN_types you have to resort to using boost preprocessor. For backwards compatibility the old interface could co-exist with the new one.