diff --git a/octa/functional.h b/octa/functional.h index 8b45045..7d97cc3 100644 --- a/octa/functional.h +++ b/octa/functional.h @@ -160,23 +160,23 @@ namespace octa { MemFn(R T::*ptr): p_ptr(ptr) {} template auto operator()(T &obj, A &&...args) -> - decltype(((obj).*(p_ptr))(args...)) { - return ((obj).*(p_ptr))(args...); + decltype(((obj).*(p_ptr))(forward(args)...)) { + return ((obj).*(p_ptr))(forward(args)...); } template auto operator()(const T &obj, A &&...args) -> - decltype(((obj).*(p_ptr))(args...)) const { - return ((obj).*(p_ptr))(args...); + decltype(((obj).*(p_ptr))(forward(args)...)) const { + return ((obj).*(p_ptr))(forward(args)...); } template auto operator()(T *obj, A &&...args) -> - decltype(((obj)->*(p_ptr))(args...)) { - return ((obj)->*(p_ptr))(args...); + decltype(((obj)->*(p_ptr))(forward(args)...)) { + return ((obj)->*(p_ptr))(forward(args)...); } template auto operator()(const T *obj, A &&...args) -> - decltype(((obj)->*(p_ptr))(args...)) const { - return ((obj)->*(p_ptr))(args...); + decltype(((obj)->*(p_ptr))(forward(args)...)) const { + return ((obj)->*(p_ptr))(forward(args)...); } }; }