std::make_tupleand std::make_pairare intended for outputting template parameters (among other things, for example, for unpacking reference wrappers). Giving them is clearly a mistake.
In this particular case, this is because the template output for rvalues ββgives their type similar to this example:
template<typename T>
void foo(T&&);
foo(42);
int i{};
foo(i);
and therefore make_tuple<int>(...)wants an rvalue reference to its argument.
, , ,
auto tup1 = std::tuple<long>(i);