#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Не компілюється: 'return': cannot convert from 'std::optional<int>' to 'bool'
Посилання на консультації, я б подумав знайти пояснення, але я прочитав це як слід.
Неявні перетворення виконуються щоразу, коли вираз якогось типу T1 використовується в контексті, який не приймає цей тип, але приймає якийсь інший тип T2; зокрема:
- коли вираз використовується як аргумент при виклику функції, яка оголошена за допомогою параметра T2;
- коли вираз використовується як операнд з оператором, який очікує T2;
- при ініціалізації нового об'єкта типу T2, включаючи оператор return у функції, що повертає T2;
- коли вираз використовується в операторі комутатора (T2 є інтегральним типом);
- коли вираз використовується в операторі if або циклі (T2 - bool).
operator bool()
зstd::optional
цеexplicit
.