This answer of @R. Martinho Fernandes muestra, que el idioma segura-bool está en desuso Apperently en C++ 11, ya que puede ser sustituido por un simple¿Es el lenguaje seguro booleano obsoleto en C++ 11?
explicit operator bool() const;
de acuerdo con la cita estándar en la respuesta §4 [conv] p3
:
Una expresión e puede convertirse implícitamente en un tipo
T
si y solo si la declaraciónT t=e;
está bien formada, para alguna variable temporal inventadat
(§8.5). Ciertas construcciones de lenguaje requieren que una expresión se convierta en un valor booleano. Una expresióne
que aparece en tal contexto se dice que es contextualmente convertidos-bool
y está bien formado si y sólo si la declaraciónbool t(e);
está bien formado, por alguna inventaron t variable temporal (§8.5).
La parte resaltada muestra claramente el "molde explícito implícito" (llamado "conversión contextual" en el estándar) como @R. Martinho lo dijo.
Los "ciertas construcciones del lenguaje" que requieren que "conversión explícita implícita" parecen ser los siguientes:
if
,while
,for
(§6.4 [stmt.select] p4
)- operadores binarios lógicos
&&
y||
(§5.14 [expr.log.and/or] p1
de ambos) - el operador de negación lógica
!
(§5.3.1 [expr.unary.op] p9
) - operador condicional
?:
(§5.14 [expr.cond] p1
) static_assert
(§7 [dcl.dcl] p4
)noexcept
(§15.4 [except.spec] p2
)
Es nuestra hipótesis en el título correcto? Espero que no hayamos pasado por alto los posibles inconvenientes.
+1: Me encanta este tipo de pregunta que me enseña cosas nuevas sobre el próximo estándar. –
Sabes qué molde implícito explícito falta en el estándar ... devolviendo algo de otro 'operador bool'. Por ejemplo, si tengo un miembro 'shared_ptr' llamado p y tengo este método:' operator bool() const {return p; } ', no se puede compilar. Eso es estúpido IMO. – David