#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;
- когда выражение используется в операторе switch (T2 является целочисленным типом);
- когда выражение используется в операторе if или цикле (T2 - bool).
operator bool()
изstd::optional
этоexplicit
.