Boost logo

Boost Users :

Subject: [Boost-users] boost::tribool "if ( someTriboolVar == indeterminate )" semantics is confusing
From: Peter Hackett (peter.hackett_at_[hidden])
Date: 2014-03-05 23:06:47

I started using tribool recently. I just discovered that I was using it

I had code that did something like:

     tribool triboolVar1 = indeterminate;

     if ( triboolVar1 == indeterminate ) {
         cout << "triboolVar1 is indeterminate" << endl;
     } else {
         cout << "triboolVar1 is NOT indeterminate" << endl;

I was expecting this to print "triboolVar1 is indeterminate".
However it prints "triboolVar1 is NOT indeterminate".

I ended up looking through "include/boost/logic/tribool.hpp" and after
a bit of head scratching, I think I understand why this doesn't do
what I expect:

The above "if" line is "really" (pseudo-code):

if ( operator==(tribool triboolVar1,tribool indeterminate) ) {

where operator== returns a tribool, and (I think)

tribool::operator safe_bool() const
     return value == true_value? &dummy::nonnull : 0;

is used to turn the tribool into a bool.

And give that operator== says:

if (indeterminate(x) || indeterminate(y))
     return indeterminate;

Then clearly no matter what the value of triboolVar1 is, the "if" code
will be false.

I haven't had any schooling in what (I'm assuming) might be called something
like "Multi-Level-Logic", but:

Shouldn't an "indeterminate" value equal another "indeterminate" value?

Peter Hackett
Member of Technical Staff
IC Manage
phone (408) 358-8191 x6012

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at