I have a function f(), that returns a std::pair<A, B> with some types A and B. And I have another function g(), that calls f() twice and returns a std::tuple<A, B, A, B>. Is there a way to construct the return tuple directly from both calls to f()? So I would like to shortcut the last three lines of my current code:
std::tuple<A, B, A, B>
g(type1 arg1, type2 arg2, ...) {
// perform some preprocessing
auto pair1 = f(...);
auto pair2 = f(...);
return { pair1.first, pair1.second, pair2.first, pair2.second }
}
into a one liner (instead of three). It would be nice, if that solution also worked with tuples of arbitrary length, especially in a template situation.
For example, in current Python3, the solution would be return (*f(...), *f(...)). Is there a similiar list/tuple unwrap operator in C++ as there is in Python?