# V1007. Value from the uninitialized optional is used. It may be an error.

Анализатор обнаружил обращение к значению объекта класса `optional`, который ранее не был проинициализирован, т.е. не хранит никакого значения. Формально это приводит к неопределенному поведению, а также служит источником других ошибок.

Рассмотрим пример некорректного кода:

    std::optional<Value> opt;
    if (cond)
    {
      opt->max = 10;
      opt->min = 20;
    }

    if (opt)
    {
      ....
    }

В данном примере `opt` так и не был проинициализирован, что в свою очередь приводит к тому, что код под условием `if (opt)` никогда не выполняется.

Исправленный вариант:

    std::optional<Value> opt;
    if (cond)
    {
      opt = Value(10, 20);
    }

    if (opt)
    {
        ....
    }

Также, анализатор умеет обнаруживать обращение к значению потенциально неинициализированного объекта типа `optional`. Например:

    boost::optional<int> opt = boost::none;
    opt = interpret(tr);

    if (cond)
      opt = {};

    process(*opt);

Исправленный вариант:

    boost::optional<int> opt = boost::none;
    opt = interpret(tr);

    if (!cond)
      process(*opt);

Примечание. Диагностическое правило имеет дополнительные настройки. Для включения какой-либо настройки необходимо добавить соответствующий комментарий в файл с исходным кодом или в файл конфигурации диагностических правил (.pvsconfig).

Расширенное сообщение. Данная настройка позволяет выдавать расширенное сообщение: в нём будет содержаться список функций, при помощи которых следует проверить объект опционального типа перед получением значения:

    //+V1007 PRINT_CHECKERS

Чувствительный режим. При включении данной настройки анализатор будет выдавать предупреждение V1007 в любом месте, где используется непроверенный объект опционального типа:

    //+V1007 PEDANTIC_MODE

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки использования неинициализированных переменных.

Данная диагностика классифицируется как:

CWE-457 CERT-EXP53-CPP

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V1007.