﻿# V3204\. The expression is always false due to implicit type conversion\. Overflow check is incorrect\.

Анализатор обнаружил не работающую из\-за неявного приведения типа проверку на переполнение\.

Рассмотрим пример:

```cpp
bool IsValidAddition(ushort x, ushort y)
{
  if (x + y < x)
    return false;
  return true;
}
```

Цель данного метода — проверить, произойдет ли переполнение при сложении двух положительных чисел\. В случае переполнения результат суммы должен оказаться меньше любого из её операндов\. 

Однако проверка не выполнит свою задачу, поскольку оператор '\+' не имеет перегрузки для сложения чисел с типом 'ushort'\. В результате оба числа будут в начале приведены к типу 'int', после чего выполнится их сложение\. Так как складываются значения типа 'int', никакого переполнения не произойдёт\.

Для исправления проверки нужно явно привести результат суммы к типу 'ushort':

```cpp
bool IsValidAddition(ushort x, ushort y)
{
  if ((ushort)(x + y) < x)
    return false;
  return true;
}
```

Кромe типа 'ushort', перегрузка оператора суммы отсутствует и для чисел с типом 'byte'\. Перед сложением эти числа также будут неявно приведены к 'int' типу\.