On 29/01/2014 02:28 p.m., John Maddock wrote:
Recently I looked for type_traits for callable classes. It so strange, I didn't find such traits. Most likely, I just missed them or something like them.
I actually don't know is there a real need for them. Anyway I tried to write such traits at least for practice and metaprogramming training. I tested them with gcc, clang and msvc2010. I would appreciate if you looked at the code. Here is the linkhttps://github.com/AntonBikineev/is_functional/ to my github repository.
It's cool that they can see hidden generated operator() of lambdas closure type.
My apologies for not replying before Anton.
This looks cool. However what does it detect? Any operator() or nullary operator()?
AFAIK it detects only the basic case of a single non-templated `operator()` with any number of arguments.
A better C++11 style interface *if* it can be implemented would be something like:
template
struct is_callable; Which inherits from true_type only if F is callable with arguments Args...
The tricky part is creating a decent interface that can deal with both lvalue and rvalue refs as arguments correctly.
Actually I was sure there was something similar in the C++11 std, but I couldn't find anything.
Not in C++11, but C++14 std::result_of