двойное (?) определение операторов-членов шаблона - PullRequest
4 голосов
/ 11 октября 2011

Если я загляну в заголовок из msvc 2008, я обнаружу, что каждое определение оператора удваивается с помощью операции шаблона типа _Другие, как, например,

_Myt& operator+=(const _Myt& _Right)
{   // add other complex
   this->_Add(_Right);
   return (*this);
}
template<class _Other> inline
_Myt& operator+=(const complex<_Other>& _Right)
{   // add other complex
   this->_Add(_Right);
   return (*this);
}

Вопрос в том, почему не будет второго определенияодного достаточно?

PS: Кажется, в gcc присутствует только второе определение, теперь я больше не волнуюсь.:)

1 Ответ

3 голосов
/ 11 октября 2011

Первый случай также ловит правую сторону, которая конвертируется в _Myt.

class MyComplex {
   // ...
   public:
     operator std::complex<double>() const;
     operator std::complex<float>() const;
};
std::complex<double> i;
i += MyComplex(1,1); // Unambiguously uses the first form.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...