function template
<functional>

std::mem_fn

template <class Ret, class T>  /* unspecified */ mem_fn (Ret T::* pm);
Convert member function to function object
Returns a function object whose functional call invokes the member function pointed by pm.

The type of the returned object has the following properties:
  • Its functional call takes as first argument an object of type T (or a reference or a pointer to it) and, as additional arguments, the arguments taken by pm (if any). The effect of such a call with fn as first argument are the same as calling fn.*pm (or (*fn).*pm if fn is a pointer), forwarding any additional arguments.
  • It has a member result_type, defined as an alias of Ret (which is the return type of pm).
  • If the member pointed by pm takes no arguments, it has a member argument_type, defined as an alias of T*.
  • If the member pointed by pm takes one argument, it has a member first_argument_type, defined as an alias of T*, and a member second_argument_type, defined as an alias of the argument taken by pm.
  • It is nothrow move-constructible, nothrow copy-constructible and nothrow copy-assignable.

Parameters

pm
Pointer to a member function.

Return value

A function object that, when called, calls pm on the object passed as first argument.

The return type is unspecified, but the type returned is a function object class with the properties described above.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// mem_fn example
#include <iostream>     // std::cout
#include <functional>   // std::mem_fn

struct int_holder {
  int value;
  int triple() {return value*3;}
};

int main () {
  int_holder five {5};

  // call member directly:
  std::cout << five.triple() << '\n';

  // same as above using a mem_fn:
  auto triple = std::mem_fn (&int_holder::triple);
  std::cout << triple(five) << '\n';

  return 0;
}

Output:

15
15


Exception safety

No-throw guarantee: never throws exceptions.

See also