#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Nie kompiluje: 'return': cannot convert from 'std::optional<int>' to 'bool'
Odniesienie do konsultacji Chciałbym znaleźć wyjaśnienie, ale przeczytałem je tak, jak powinno być dobrze.
Konwersje niejawne są wykonywane za każdym razem, gdy wyrażenie pewnego typu T1 jest używane w kontekście, który nie akceptuje tego typu, ale akceptuje niektóre inne typy T2; w szczególności:
- gdy wyrażenie jest używane jako argument podczas wywoływania funkcji zadeklarowanej za pomocą T2 jako parametru;
- gdy wyrażenie jest używane jako operand z operatorem, który oczekuje T2;
- podczas inicjowania nowego obiektu typu T2, w tym instrukcji return w funkcji zwracającej T2;
- gdy wyrażenie jest używane w instrukcji switch (T2 jest typem integralnym);
- gdy wyrażenie jest używane w instrukcji if lub w pętli (T2 to bool).
operator bool()
ostd::optional
toexplicit
.