Can a std::function store pointers to data members?

The effect of a call to the function call operator of std::function<R(ArgTypes...)>:

R operator()(ArgTypes... args) const

is equivalent to (§ 20.9.11.2.4 [func.wrap.func.inv]/p1):

INVOKE<R>(f, std::forward<ArgTypes>(args)...)

whose definition includes the following bullet (§ 20.9.2 [func.require]/p1):

Define INVOKE(f, t1, t2, …, tN) as follows:

[…]

1.3t1.*f when N == 1 and f is a pointer to member data of a class T and t1 is an object of type T or a
reference to an object of type T or a reference to an object of a type derived from T;

then, when f is a pointer to a data member stored in an internal invoker of a std::function, then the std::function itself should define a single argument, e.g.:

std::function<int(std::pair<int,int>)> f = &std::pair<int,int>::first;

f(std::make_pair(1, 2));

DEMO

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)