¿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ón T 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ón e que aparece en tal contexto se dice que se convierte contextualmente a bool y está bien formada si y solo si la declaración bool 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