Peter Dimov wrote:
Ian McCulloch wrote:
Yes, if you want to forward to a function but you don't know if it takes arguments by value or const reference.
It doesn't matter. When you forward, you pass to result_of the exact types of the arguments you are supplying in the function (object) call, with a reference when the argument is an lvalue.
int x; long y; int const z; int g(); int & h();
f(x, y); // result_of
f(1, x); // result_of f(z, 4); // result_of f( g(), h() ); // result_of What is 'f' and how it takes its arguments in the cases above does not affect how result_of is used.
But what happens if F doesn't have an operator() overload that takes
F(int const&, int) but only has F(int, int) ? It seems you need to know
this in advance. I tried detecting it with SFINAE but that doesn't work; I
would have expected that if result