#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Não compila: 'return': cannot convert from 'std::optional<int>' to 'bool'
Referência de consultoria Eu teria pensado em encontrar uma explicação, mas li como deveria estar ok.
Conversões implícitas são executadas sempre que uma expressão de algum tipo T1 é usada no contexto que não aceita esse tipo, mas aceita outro tipo T2; em particular:
- quando a expressão é usada como argumento ao chamar uma função que é declarada com T2 como parâmetro;
- quando a expressão é usada como um operando com um operador que espera T2;
- ao inicializar um novo objeto do tipo T2, incluindo a instrução return em uma função retornando T2;
- quando a expressão é usada em uma instrução switch (T2 é do tipo integral);
- quando a expressão é usada em uma instrução if ou em um loop (T2 é booleano).
operator bool()
destd::optional
éexplicit
.