如何正确地从函数中给出向量 (type_traits)

How correctly give vector from function (type_traits)

我如何returnstd::vector从这个operator+()

#include <iostream>
#include <vector>
#include <type_traits>
#include <algorithm>
#include <utility>

template<typename> struct is_std_vector :  std::false_type {};
template<typename T, typename A> struct is_std_vector<std::vector<T, A>> :  std::true_type {};
template <typename T>
std::enable_if_t<is_std_vector<std::decay_t<T>>::value>
operator+(T&& vec1, T&& vec2)
{
    for (int i = 0; i < vec2.size(); ++i)
        vec1.emplace_back(std::forward<int>(vec2.at(i)));
    return vec1;
}

int main()
{
    std::vector<int> vec1{ 1,2,3,4,5 };
    std::vector<int> vec2{ 2,3,4,5,6 };
    std::vector<int> vecResult;
    vecResult = std::move(vec1) + std::move(vec2);
    for (const auto& itr : vecResult)
        std::cout << itr << std::endl;
    return 0;
}

现在函数 return 无效,但我不知道为什么,我想给 std::vector 作为对 operator+(T&& vec1, T&& vec2) 和 return std::vector 的前向引用.我认为这很好,但编译器知道得更多。有什么建议吗?

错误编译器

C2679 binary '=': no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)

问题是当条件为真时 std::enable_if_t 的默认类型是 void

所以,而不是返回 void

std::enable_if_t<is_std_vector<std::decay_t<T>>::value>
   operator+(T&& vec1, T&& vec2)

我想你应该返回 T 或类似的东西

std::enable_if_t<is_std_vector<std::decay_t<T>>::value, T>
   operator+(T&& vec1, T&& vec2)