#include <optional>
bool f() {
std::optional<int> opt;
return opt;
}
Ne compile pas: 'return': cannot convert from 'std::optional<int>' to 'bool'
Consultation de référence J'aurais pensé trouver une explication, mais je l'ai lu comme il se doit.
Des conversions implicites sont effectuées chaque fois qu'une expression d'un certain type T1 est utilisée dans un contexte qui n'accepte pas ce type, mais accepte un autre type T2; en particulier:
- lorsque l'expression est utilisée comme argument lors de l'appel d'une fonction déclarée avec T2 comme paramètre;
- lorsque l'expression est utilisée comme opérande avec un opérateur qui attend T2;
- lors de l'initialisation d'un nouvel objet de type T2, y compris l'instruction return dans une fonction retournant T2;
- lorsque l'expression est utilisée dans une instruction switch (T2 est de type intégral);
- lorsque l'expression est utilisée dans une instruction if ou une boucle (T2 est bool).
operator bool()
destd::optional
estexplicit
.