
Doug Gregor wrote: <snip>
Now, in C++0x, the metaprogramming-based implementation and specification of result_of is going to disappear in favor of decltype. We can remove that nested result class template, then...
Right! But we don't get SFINAE-like behavior.
With a decltype-based implementation, the code above would be ill-formed, so I think the right answer is "do the same thing that the decltype implementation would do." ... but I guess we might be able to use that very language extension to detect whether a function object has a call operator that suits given argument types.
This has gone back-and-forth many times. At present, the expression inside decltype won't have SFINAE capabilities, just like sizeof doesn't work with SFINAE now.
That's not what I meant. I'll try with code: struct reserved { }; template<class FuncObj> struct tester : FuncObj { using FuncObj::operator(); reserved operator()(...) const; // [...] }; // Check whether the type of the expression 'some_tester(a0...aN)' // is 'reserved' in a traits template. I guess that would require the function object to be copy-constructible, but that doesn't seem like a show stopper to me... Regards, Tobias