EricWF added a comment. Add inline comment describing part of the change. Sorry about all the spam :S
================ Comment at: include/functional:1266 @@ -1265,2 +1265,3 @@ + _LIBCPP_INLINE_VISIBILITY typename __invoke_return0<type, _A0>::type operator() (_A0& __a0) const { ---------------- This part of the change adds extra overloads in `mem_fn` so that the call operator can accept rvalues and temporaries as input. A template argument `Ax&` will bind to any cv-qualified lvalue. However it will not bind to an rvalue. In order to accept an rvalue in C++03 we need to accept it as `Ax const&`. Therefore we need to enumerate every possible combination of const and non-const arguments for each `operator()(...)` function. Unfortunately this solution isn't perfect. Non-const rvalues will be forwarded as const by `__invoke(...)` and anything that required the values to be non-const will not compile. However I think this is the best we can do. This same change is made to `reference_wrapper`. http://reviews.llvm.org/D11553 _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits