2010-08-16 12 views
5

Sto esplorando boost::tribool e sono rimasto sorpreso dal seguente comportamento.Boost :: tribool: comportamento strano o bug?

{ 
using namespace boost; 

boost::tribool t(indeterminate); 

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

Tuttavia, se faccio questo, l'asserzione passa.

assert(indeterminate(t)); 

Nessun avvertimento o errore del compilatore in entrambi i casi. Qualcuno ha una buona spiegazione del perché dovrebbe essere ??

risposta

11

Penso che la risposta è nel documentation:

il risultato del confronto tra due valori indeterminati è indeterminato (non è vero) - non sappiamo quali sono i valori, quindi non possiamo dire che essi sono pari;

la funzione indeterminate può essere utilizzata per verificare se un tribool è in uno stato indeterminato.

+0

E poiché le conversioni indeterminate implicitamente sono false, l'affermazione non riesce. –

+1

"il risultato del confronto di due valori indeterminati è indeterminato". Ahia. Immagino che abbia senso ad un livello, ma non è intuitivo per me. – Roddy

+0

@Roddy, guarda l'implementazione di tribool :: operator ==() sei pronto? restituisce tribool! Odio il ragazzo che ha inviato questo codice per aumentare: D +1 per una buona domanda, questo NON è un comportamento intuitivo! –