Сложить два обьекта одного шаблона но с разными типами данных через оператор сложения

Здраствуйте нужно перегрузить оператор сложения для того чтобы была возможность сложить два обьекта шаблона но с разными типами данных.

Вот мой код но ругается в том моменте где я пытаюсь сложить два обьекта шаблона.

 #include <iostream>
 using namespace std;

 template<typename T>
 class Sum {
 private:
   T value;
 public:
    Sum() {
       value = 0;
    }
    Sum(T value) {
       this->value = value;
    }
    void Print() {
        cout << value;
    }

    Sum<T>& operator+(const Sum<T>& classObj);
  };

  template <typename T>
  Sum<T>& Sum<T>::operator+(const Sum<T>& classObj) {

     Sum<T> temp;
     temp.value = this->value + classObj.value;
     return temp;

  }


  int main() {
  setlocale(LC_ALL, "Rus");

  Sum<double> first(14.5);
  Sum<int> second(10);

  first + second;  //ошибка тут

  }

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

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

Например, так:

template<typename T>
class Sum {
private:
    T value;
public:
    Sum() {
        value = 0;
    }
    Sum(T value) {
        this->value = value;
    }
    void Print() {
        cout << value;
    }

    template <typename V, typename U>
    friend auto operator+(const Sum<V>& t, const Sum<U>& u);


};

template <typename T, typename U>
auto operator+(const Sum<T>& t, const Sum<U>& u)
{

    Sum<common_type_t<T,U>> temp;
    temp.value = t.value + u.value;
    return temp;

}


int main() {
    setlocale(LC_ALL, "Rus");

    Sum<double> first(14.5);
    Sum<int> second(10);

    auto Q = first + second;  //ошибка тут

    Q.Print();

}
→ Ссылка