Operador de modelo C ++ sobrecarregando com diferentes tipos

O exemplo abaixo define uma classe de contêiner podtype básica. Usando essa classe, uma série de typedefs é criada, o que representa uma versão OOP do podtype básico. O problema se origina quando começamos a atribuir esses tipos uns aos outros.

Eu tentei definir o operador como método amigo com argumentos lhs e rhs usando PodObjects simples como tipo, mas sem nenhum sucesso. Existe alguém que possa ter experimentado algo semelhante ou conhecer outra solução para esse problema?

Desde já, obrigado.

<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>

Resultados em uma saída do compilador:

<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>

EDITAR:

O método amigo abaixo faz o trabalho para mim:

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

questionAnswers(1)

yourAnswerToTheQuestion