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.