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

Данное диагностическое правило основано на руководстве [AUTOSAR](https://www.autosar.org/) \(AUTomotive Open System ARchitecture\) по разработке программного обеспечения\.

Анализатор обнаружил опасное приведение числа к перечислению\. Указанное число может не входит в диапазон значений 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;
```