See implementation of make_tuple in std library
// NB: DR 705.
template<typename... _Elements>
constexpr tuple<typename __decay_and_strip<_Elements>::__type...>
make_tuple(_Elements&&... __args)
{
typedef tuple<typename __decay_and_strip<_Elements>::__type...>
__result_type;
return __result_type(std::forward<_Elements>(__args)...);
}
The return type is decayed (reference removed)? so why it that ? what is the concern of this design ?
I know we have some alternative ways to achieve my requirements, e.g. boost::ref.
My question is why make_tuple has to remove the reference of types of input?
Update: Can anyone help on this discussion of my question ?