2010-08-16 23 views
5

Estoy explorando boost::tribool y me sorprendió el siguiente comportamiento.Boost :: tribool: comportamiento extraño o error?

{ 
using namespace boost; 

boost::tribool t(indeterminate); 

assert(t==indeterminate); // This assertion fails! 
} 

Sin embargo, si hago esto, la afirmación pasa.

assert(indeterminate(t)); 

No hay advertencias o errores del compilador en ambos casos. ¿Alguien tiene una buena explicación de por qué esto debería ser?

Respuesta

11

Creo que la respuesta está en el documentation:

el resultado de comparar dos valores indeterminados es indeterminada (no es cierto) - no se sabe cuáles son los valores, por lo que no podemos decir que son igual;

La función indeterminate se puede utilizar para comprobar si un tribool se encuentra en un estado indeterminado.

+0

Y como las conversiones indeterminadas implícitamente bool son falsas, la afirmación falla. –

+1

"el resultado de comparar dos valores indeterminados es indeterminado". Ay. Supongo que tiene sentido en un nivel, pero no es intuitivo para mí. – Roddy

+0

@Roddy, mira la implementación de tribool :: operator ==() ¿Estás listo? ¡vuelve tribool! Odio al tipo que envió este código para impulsar: D +1 para una buena pregunta, ¡este NO es un comportamiento intuitivo! –