¿Está obsoleto el lenguaje safe-bool en C++11?
Esta respuesta de @R. Martinho Fernandes muestra, que el lenguaje safe-bool está aparentemente obsoleto en C++11, ya que puede ser reemplazado por un simple{[26]]}
explicit operator bool() const;
De acuerdo con la cita estándar en la respuesta §4 [conv] p3
:
Una expresión e se puede convertir implícitamente a 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 se convierte contextualmente abool
y está bien formada si y solo si la declaraciónbool t(e);
está bien formada, para alguna variable temporal inventada t (§8.5).
La parte resaltada muestra claramente el "molde explícito implícito" (llamado "conversión contextual" en el estándar) como lo expresó @R. Martinho.
Los "ciertos constructos del lenguaje" que requieren que " implicit explicit cast" parece ser lo siguiente:
-
if
,while
,for
(§6.4 [stmt.select] p4
) - operadores lógicos binarios
&&
y||
(§5.14 [expr.log.and/or] p1
para 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 correcta nuestra suposición en el título? Espero que no hayamos pasado por alto ningún inconveniente potencial.
Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32
Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52