Это на c ++, с использованием Visual Studio 2019 (не пробовал другие компиляторы). Я хочу добавить шаблонный метод operator =. Если параметр не является константным, он работает нормально. Но если параметр const, даже если я создаю версию с параметром const, он не вызывается. Вместо этого он выполняет простое поверхностное копирование.
Если я использую именованную функцию вместо оператора, она работает как положено. Точно так же, если это не шаблонизировано, оператор вызывается как ожидалось. Кажется, проблема в комбо.
Вот пример, демонстрирующий проблему.
class CTest
{
public:
int x{};
CTest() = default;
CTest(int value) : x(value) {}
// non-const operator=
template<class SrcType>void operator=(SrcType& src)
{
x = src.x;
}
// const operator=
template<class SrcType>void operator=(const SrcType& src)
{
x = src.x;
}
};
int main()
{
CTest nonConstSrc{ 3 };
const CTest constSrc{ 5 };
CTest result;
result = nonConstSrc; // correctly calls non-const operator=
result = constSrc; // ? shallow copy, not calling const operator=
return 0;
}
Есть идеи, как заставить его использовать мою перегруженную функцию? Спасибо.