I think this could work:
template<typename T>
DataList & operator+=(DataList &lhs, T &&rhs)
{
lhs.reserve(lhs.size()+rhs.size());
for(auto &&data : rhs)
{
if constexpr (std::is_rvalue_reference_v<T>)
lhs.emplace_back(std::move(data));
else lhs.emplace_back(data);
}
return lhs;
}