Boost logo

Boost :

Subject: Re: [boost] [signals2] Test failure in C++11 (trivial fix for incorrect usage of boost::optional)
From: Gavin Lambert (gavinl_at_[hidden])
Date: 2014-02-27 20:45:44

On 28/02/2014 12:33, Quoth Frank Mori Hess:
> Ah, I wasn't aware optional already had overloaded the comparison
> operators with comparisons of optional<T> vs T. A little unfortunate
> IMO, it makes optional<bool> a bit of a disaster when any sort of
> conversion to bool at all is supported.

Not really; tristate bool logic with optional<bool> is pretty
straightforward. It usually falls into the pattern:

   if (value == true) {
     /* do something when true */
   } else if (value == false) {
     /* do something when false */
   } else {
     /* do something when null/none/unknown/unspecified */

There is a little trap for the unwary where:

   if (value) {
     /* either true or false */
   } else {
     /* only null, not false */

But once you get used to it, I'd hardly call it a "disaster". And it's
consistent with the behaviour of other values, eg. optional<int> when
zero executes the if block, not the else block.

Boost list run by bdawes at, gregod at, cpdaniel at, john at