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

  • A+

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


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>     > { }; 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: