#ifndef SPROUT_FUNCTIONAL_MEM_FUN_REF_HPP #define SPROUT_FUNCTIONAL_MEM_FUN_REF_HPP #include #include namespace sprout { // D.8.2.2 adaptors (deprecated) template class mem_fun_ref_t : public sprout::unary_function { private: Ret (T::*f_)(); public: explicit SPROUT_CONSTEXPR mem_fun_ref_t(Ret (T::*pf)()) : f_(pf) {} SPROUT_CONSTEXPR Ret operator()(T& r) const { return (r.*f_)(); } }; template class const_mem_fun_ref_t : public sprout::unary_function { private: Ret (T::*f_)() const; public: explicit SPROUT_CONSTEXPR const_mem_fun_ref_t(Ret (T::*pf)() const) : f_(pf) {} SPROUT_CONSTEXPR Ret operator()(const T& r) const { return (r.*f_)(); } }; template class mem_fun1_ref_t : public sprout::binary_function { private: Ret (T::*f_)(Arg); public: explicit SPROUT_CONSTEXPR mem_fun1_ref_t(Ret (T::*pf)(Arg)) : f_(pf) {} SPROUT_CONSTEXPR Ret operator()(T& r, Arg x) const { return (r.*f_)(x); } }; template class const_mem_fun1_ref_t : public sprout::binary_function { private: Ret (T::*f_)(Arg) const; public: explicit SPROUT_CONSTEXPR const_mem_fun1_ref_t(Ret (T::*pf)(Arg) const) : f_(pf) {} SPROUT_CONSTEXPR Ret operator()(const T& r, Arg x) const { return (r.*f_)(x); } }; template inline SPROUT_CONSTEXPR sprout::mem_fun_ref_t mem_fun_ref(Ret (T::*f)()) { return sprout::mem_fun_ref_t(f); } template inline SPROUT_CONSTEXPR sprout::const_mem_fun_ref_t mem_fun_ref(Ret (T::*f)() const) { return sprout::const_mem_fun_ref_t(f); } template inline SPROUT_CONSTEXPR sprout::mem_fun1_ref_t mem_fun_ref(Ret (T::*f)(Arg)) { return sprout::mem_fun1_ref_t(f); } template inline SPROUT_CONSTEXPR sprout::const_mem_fun1_ref_t mem_fun_ref(Ret (T::*f)(Arg) const) { return sprout::const_mem_fun1_ref_t(f); } } // namespace sprout #endif // #ifndef SPROUT_FUNCTIONAL_MEM_FUN_REF_HPP