﻿# V2552\. MISRA\. Expressions with enum underlying type should have values corresponding to the enumerators of the enumeration\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Анализатор обнаружил опасное приведение числа к перечислению\. Указанное число может не входит в диапазон значений enum\.

Пример:

```cpp
enum TestEnum { A, B, C };
TestEnum Invalid = (TestEnum)42;
```

Так как стандарт не указывает базовый тип для enum, то результат приведения числа, чьё значение не входит диапазон элементов enum, является unspecified behavior до C\+\+17 и undefined behavior начиная с C\+\+17\.

Для того чтобы этого избежать, необходимо проверять числа перед приведениями\. Как вариант, можно явно указать базовый тип для enum или использовать 'enum class', базовый тип которого по умолчанию \- 'int'\.

Корректный код:

```cpp
enum TestEnum { A, B, C, Invalid = 42 };
```

Или:

```cpp
enum TestEnum : int { A, B, C };
E Invalid = (E)42;
```

Или:

```cpp
enum class TestEnum { A, B, C };
TestEnum Invalid = (TestEnum)42;
```