In c++ 11, how to invoke an arbitrary callable object?
Rather than implementing INVOKE yourself, use one of the library features that uses it. In particular, std::reference_wrapper works. Thus you can have the effect of std::invoke(f, args…) with std::ref(f)(args…): template<typename F, typename… Args> auto invoke(F f, Args&&… args) -> decltype(std::ref(f)(std::forward<Args>(args)…)) { return std::ref(f)(std::forward<Args>(args)…); } I didn’t forward f because std::reference_wrapper requires that the object passed … Read more