#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
No compila: 'return': cannot convert from 'std::optional<int>' to 'bool'
Consulta de referencia Pensé encontrar una explicación, pero la leí, ya que debería estar bien.
Las conversiones implícitas se realizan cada vez que se usa una expresión de algún tipo T1 en un contexto que no acepta ese tipo, pero acepta algún otro tipo T2; en particular:
- cuando la expresión se usa como argumento cuando se llama a una función que se declara con T2 como parámetro;
- cuando la expresión se usa como un operando con un operador que espera T2;
- al inicializar un nuevo objeto de tipo T2, incluida la instrucción return en una función que devuelve T2;
- cuando la expresión se usa en una declaración de cambio (T2 es de tipo integral);
- cuando la expresión se usa en una declaración if o un bucle (T2 es bool).
operator bool()
destd::optional
isexplicit
.