correctly forward

master
Daniel Kolesa 2015-04-22 23:28:43 +01:00
parent 9a7a832fe3
commit 90cecea052
1 changed files with 8 additions and 8 deletions

View File

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