Помогите найти проблему в операторе умножения для вектора

Писал код для возведения вектора во вторую степень. Перегрузил оператор для вектора, но столкнулся с проблемой: компилятор ошибок не видит, но програма не работает.

Примеры ошибок:

_Xlength_error("vector too long");

_THROW(bad_array_new_length{})

throw std::bad_alloc{};

Сам код:

#include <iostream>
#include <map>
#include <vector>

using namespace std;

template<typename Vec>
vector <Vec>& operator*(vector <Vec>& vec1, vector <Vec>& vec2) {
    vector <Vec> vec3;
    for (int i = 0; i < vec1.size(); i++) {
        Vec z = 0;
        z = vec1[i] * vec2[i];
        vec3.push_back(z);
    }
    return vec3;
}

template<typename T>
T Sqr(T x) {
    return x * x;
}

int main() {
    vector<int> v = { 1, 2, 3 };
    cout << "vector:";
    for (int x : Sqr(v)) {
        cout << ' ' << x;
    }
    cout << endl;
return 0;
}

Ответы (1 шт):

Автор решения: needKVAS

Вы возвращаете ссылку на временный объект. Правильно будет так:

template<typename Vec>
vector<Vec> operator*(const vector<Vec>& vec1, const vector<Vec>& vec2) {
    //...
}
→ Ссылка