Dave,
AFAIK, std::iterator_traits<> is one of the counterparts of function_traits<>, not?
A sort of symmetry which iterator_traits<> has got is that it can work for Iterators as well as plain pointers.
That's the wrong way to think about it. It just works for iterators. Plain pointers just happen to be iterators, by the *standard's definition* of "iterator."
Smart Alec... ;) Alright I could be more specific speaking like this: "... it can work for Iterators which happen to be classes as well as plain pointers." Excused me? :)
This seems to be not the case for function_traits<>. That is, you can pass a function type to it, but you can't do that for a functor. Is that right?
That's because function object types (what you're calling functors)
It's not me, AFAIK. That's another common name of them. Isn't that?
are not functions by the standard's definition of "function."
Sure.
It doesn't work because there's no way to code it in general.
Eh, really? I'm begining to become upset when I see Dave Abrahams -- of the biggest names in Metaprogramming -- says that. :(
First of all there's no universal standard for a way to get the result type of a function object. Accessing a nested result_type sometimes works, but then, sometimes the operator() is overloaded, or even templated.
Gush! Seems that you're right... :(
You might look at boost::result_of for a more general solution.
Let me see. I'll be back afterwards... ;) All of the Best, --Hossein __________________________________ Do you Yahoo!? Yahoo! Mail - You care about security. So do we. http://promotions.yahoo.com/new_mail