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

Reply via email to