У меня есть функция, которая принимает либо lvalue, либо rvalue:
void doSomething(Foo& foo);
void doSomething(Foo&& foo);
И другие функции, которые возвращают либо rvalue, либо lvalue:
Foo fun1();
Foo& fun2();
// ...
Теперь я хочу передать результат этих функций на doSomething
. Конечно, я могу сделать следующее:
template<typename F>
void callFunctions(F&& funToCall) {
doSomething(funToCall());
}
Но как я могу сохранить результат funToCall
и передать doSomething
правильное lvalue или rvalue. Я хочу сделать что-то вроде:
template<typename F>
void callFunctions(F&& funToCall) {
auto theResult = funToCall();
doSomething(theResult); // I want to call the correct overload and not always the Foo& one
}