Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can std::is_invocable be emulated within C++11?

Tags:

c++

c++11

c++17

I'd like to use std::is_invocable, however we are using c++11 standard, while is_invocable is available only from c++17.

Is there any way to emulate the functionality using c++11?

Thank you

like image 940
jlanik Avatar asked Jul 05 '18 09:07

jlanik


1 Answers

You can try this implementation:) Taken from boost C++ libraries. I've tested it with VS2017 with standard C++14.

template <typename F, typename... Args>
struct is_invocable :
    std::is_constructible<
        std::function<void(Args ...)>,
        std::reference_wrapper<typename std::remove_reference<F>::type>
    >
{
};

template <typename R, typename F, typename... Args>
struct is_invocable_r :
    std::is_constructible<
        std::function<R(Args ...)>,
        std::reference_wrapper<typename std::remove_reference<F>::type>
    >
{
};
like image 188
Mohit Avatar answered Oct 22 '22 08:10

Mohit