
On Sun, Nov 4, 2012 at 2:23 PM, Mathias Gaunard < mathias.gaunard@ens-lyon.org> wrote:
Personally, I've found it more useful to just not define result_of<F(args)>::type if F(args) cannot be called.
The only problem with that is that you have to rely on the creator of a function object to abide by this convention. "can_be_called" (callable might be a simpler name and is what was used with C++0x concepts) would work regardless of whether or not result_of is defined. Anyway, +1 from me to the idea of a can_be_called metafunction. Just because it might be something to consider in terms of interface, the way Callable was with concepts was defined is the following ( http://generic.nfshost.com/generic/standard_concepts/concepts/callable.html ): //////////////////////////////////////////////////////////////////////////////// auto concept Callable <file:///E:/boost_sandbox/generic/libs/doc/html/boost_generic/standard_concepts/concepts/callable.html><typename F, typename... Args> { typename result_type; result_type operator()(F&, Args...); result_type operator()(F&&, Args...);} //////////////////////////////////////////////////////////////////////////////// So, instead of specifying the return type when invoking the metafunction, it automatically defines an associated type "result_type," which a programmer could then check against if he or she desired. Again, your implementation may be more useful depending on the context, but this is something to consider. -- -Matt Calabrese