Перегрузка оператора шаблона C ++ разными типами

В приведенном ниже примере определяется базовый класс контейнера подтипа. Используя этот класс, создается серия typedef, которые представляют собой версию ООП базового подтипа. Проблема возникает, когда мы начинаем присваивать эти типы друг другу.

Я попытался определить оператор как метод друга с аргументами lhs и rhs, используя простой PodObjects как тип, но без каких-либо успехов. Есть ли кто-нибудь, кто мог испытать что-то похожее или знает другое решение этой проблемы.

Заранее спасибо.

<code>#include <stdint.h>

template <typename T>
class PodObject {
protected:
    T _value;

public:
    PodObject<T>(int rhs) {
        this->_value = static_cast<T>(rhs);
    }   

    PodObject<T> operator+= (PodObject<T> const &rhs){
        this->_value = rhs._value;
        return *this;
    }   
};  

typedef PodObject<int8_t> Int8;
typedef PodObject<int16_t> Int16;

int main() {
    Int16 a = 10; 
    Int8 b = 15; 

    a += b; // Source of problem
    return 0;
}
</code>

Результаты в выводе компилятора:

<code>example.cpp:26:11: error: no viable overloaded '+='
        a += b;
        ~ ^  ~
example.cpp:13:22: note: candidate function not viable: no known conversion from 'Int8' (aka 'PodObject<int8_t>') to 'const PodObject<short>'
      for 1st argument
        PodObject<T> operator+= (PodObject<T> const &rhs){
</code>

РЕДАКТИРОВАТЬ:

Метод друга ниже делает эту работу за меня:

<code>template<typename U, typename W>
friend PodObject<U> operator+= (PodObject<U> &lhs, PodObject<W> const &rhs) {
    lhs._value += rhs._value;
    return lhs;
} 
</code>

Ответы на вопрос(1)

Ваш ответ на вопрос