@@ -72,20 +72,38 @@ class cpp_function : public function {
7272 (detail::function_signature_t <Func> *) nullptr , extra...);
7373 }
7474
75- // / Construct a cpp_function from a class method (non-const)
75+ // / Construct a cpp_function from a class method (non-const, no ref-qualifier )
7676 template <typename Return, typename Class, typename ... Arg, typename ... Extra>
7777 cpp_function (Return (Class::*f)(Arg...), const Extra&... extra) {
7878 initialize ([f](Class *c, Arg... args) -> Return { return (c->*f)(args...); },
7979 (Return (*) (Class *, Arg...)) nullptr , extra...);
8080 }
8181
82- // / Construct a cpp_function from a class method (const)
82+ // / Construct a cpp_function from a class method (non-const, lvalue ref-qualifier)
83+ // / A copy of the overload for non-const functions without explicit ref-qualifier
84+ // / but with an added `&`.
85+ template <typename Return, typename Class, typename ... Arg, typename ... Extra>
86+ cpp_function (Return (Class::*f)(Arg...)&, const Extra&... extra) {
87+ initialize ([f](Class *c, Arg... args) -> Return { return (c->*f)(args...); },
88+ (Return (*) (Class *, Arg...)) nullptr , extra...);
89+ }
90+
91+ // / Construct a cpp_function from a class method (const, no ref-qualifier)
8392 template <typename Return, typename Class, typename ... Arg, typename ... Extra>
8493 cpp_function (Return (Class::*f)(Arg...) const , const Extra&... extra) {
8594 initialize ([f](const Class *c, Arg... args) -> Return { return (c->*f)(args...); },
8695 (Return (*)(const Class *, Arg ...)) nullptr , extra...);
8796 }
8897
98+ // / Construct a cpp_function from a class method (const, lvalue ref-qualifier)
99+ // / A copy of the overload for const functions without explicit ref-qualifier
100+ // / but with an added `&`.
101+ template <typename Return, typename Class, typename ... Arg, typename ... Extra>
102+ cpp_function (Return (Class::*f)(Arg...) const &, const Extra&... extra) {
103+ initialize ([f](const Class *c, Arg... args) -> Return { return (c->*f)(args...); },
104+ (Return (*)(const Class *, Arg ...)) nullptr , extra...);
105+ }
106+
89107 // / Return the function name
90108 object name () const { return attr (" __name__" ); }
91109
0 commit comments