Что означает этот синтаксис if? C++

Читал про std::oprional и наткнулся на такой кусок кода:

if (auto ostr = maybe_create_hello(); ostr) // Это кто? (Who?) :/
    std::cout << "ostr " << *ostr << '\n';  
else  
    std::cout << "ostr is null\n";

Не могу понять что происходит в условии if. Первая часть с auto понятна - прямо в if инициализируется переменная ostr значением функции. Но после ; ostr - что это? И как if проверяет данное выражение?


Ответы (1 шт):

Автор решения: Eoan Ermine
if (auto ostr = maybe_create_hello(); ostr)

Вышеприведенный фрагмент кода эквивалентен следующему

{
    auto ostr = maybe_create_hello();
    if (ostr) {
        // ...
    }
} 

Сперва он объявляет переменную ostr, инициализируя ее значением, возвращенным функцией maybe_create_hello (являющимся, как я понимаю, std::optional<std::string> или std::optional<const char*>).

А далее, так как результат выражения, переданного в качестве условия оператора if должен приводиться к bool, пытается привести ostr к bool, что успешно осуществляется, так как для std::optional перегружено приведение к bool, возвращающее true, если объект содержит значение, и false, если не содержит.

Документация к классу std::optional: cppreference.com

Документация к оператору if: cppreference.com

→ Ссылка