correctly forward

This commit is contained in:
q66 2015-04-22 23:28:43 +01:00
parent 9a7a832fe3
commit 90cecea052

View file

@ -160,23 +160,23 @@ namespace octa {
MemFn(R T::*ptr): p_ptr(ptr) {} MemFn(R T::*ptr): p_ptr(ptr) {}
template<typename... A> template<typename... A>
auto operator()(T &obj, A &&...args) -> auto operator()(T &obj, A &&...args) ->
decltype(((obj).*(p_ptr))(args...)) { decltype(((obj).*(p_ptr))(forward<A>(args)...)) {
return ((obj).*(p_ptr))(args...); return ((obj).*(p_ptr))(forward<A>(args)...);
} }
template<typename... A> template<typename... A>
auto operator()(const T &obj, A &&...args) -> auto operator()(const T &obj, A &&...args) ->
decltype(((obj).*(p_ptr))(args...)) const { decltype(((obj).*(p_ptr))(forward<A>(args)...)) const {
return ((obj).*(p_ptr))(args...); return ((obj).*(p_ptr))(forward<A>(args)...);
} }
template<typename... A> template<typename... A>
auto operator()(T *obj, A &&...args) -> auto operator()(T *obj, A &&...args) ->
decltype(((obj)->*(p_ptr))(args...)) { decltype(((obj)->*(p_ptr))(forward<A>(args)...)) {
return ((obj)->*(p_ptr))(args...); return ((obj)->*(p_ptr))(forward<A>(args)...);
} }
template<typename... A> template<typename... A>
auto operator()(const T *obj, A &&...args) -> auto operator()(const T *obj, A &&...args) ->
decltype(((obj)->*(p_ptr))(args...)) const { decltype(((obj)->*(p_ptr))(forward<A>(args)...)) const {
return ((obj)->*(p_ptr))(args...); return ((obj)->*(p_ptr))(forward<A>(args)...);
} }
}; };
} }