call(f) , F , . . result_of<F()> , F() int()(), , , ++ ( , ).
, result_of<F&()>, , , . call(F& f) F(), F lvalue, , lvalue F , . :
struct S {
double operator()()& {return 0.0;}
void operator()()&& { }
};
result_of<F()>::type void, .
result_of<F&()>, , , F , call(f) .
(3) , , variable/function, l-. "" "f" , ?
, . . call(F&) , .
(4) ---- l, " (F & f)"?
, .
, , call(F f) not call(F& f). , result_of, F(), F - l.