Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2003-02-14 06:21:05

Fredrik Blomqvist wrote:
> What's the rationale for mem_fn to (in the case of data members) make
> it's return_type a reference?

It's because mem_fn returns a reference.

#include <boost/mem_fn.hpp>
#include <iostream>

template<class F, class A1> typename F::result_type call(F f, A1 a1)
    return f(a1);

struct X
    int i;

int main()
    X x = { 5 };
    boost::mem_fn(&X::i)(&x) = 42;
    int const * p = &call(boost::mem_fn(&X::i), &x);
    std::cout << *p << std::endl;

A data member is treated as if it was a member function that returns a
reference to the member. Exposing a const reference as result_type has its
limitations since mem_fn tries to preserve the (non-)constness of the data
member, but it's as close as it can get.

Boost list run by bdawes at, gregod at, cpdaniel at, john at