Попытка предотвратить неявное преобразование с использованием арифметических c операторов - PullRequest
0 голосов
/ 15 февраля 2020

Есть ли способ вызвать ошибку времени компиляции при неявном преобразовании с использованием арифметических операторов c. Например:

class A:
public:
A operator + (const A tmp) const;
void setX(const int X)
void setY(const int Y)
void setZ(const int Z)
private: 
template <typename Y> 
Y operator +(const Y tmp);

main: 
int a1 {2};
int a2 {3};
int a3 {4}'

char b1 {2};
char v2 {3};
char b3 {4};

A a;
a.setX(a1);
a.sety(a2);
a.setz(a3);

A b;
b.setx(b1);
b.sety(b2);
b.setz(b3);
A d= a+b; //more or so of what i mean. This should be an error
A e= a+a;  // this should not be because its the same type



проблема в том, что когда я создаю шаблон для оператора, a + b и a + c генерируют ошибку. Что меня смущает, потому что + c - единственный, который должен выдавать ошибку.

1 Ответ

0 голосов
/ 15 февраля 2020

Неявное преобразование будет иметь место, когда типы обоих параметров не совпадают. Йо может проверить это при компиляции с чем-то вроде

static_assert(std::is_same<decltype(a), decltype(c)>::value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...