Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Update the code to consistently use a check for
.get() == 0
, as was already done in most, but not all, places (presumably precisely because issues like this), to avoid issues with ambiguous overloadedoperator==
andoperator!=
.The motivating example is use with JSON for Modern C++ that does some unfortunate operator overloading (see nlohmann/json#610 for the respective bug) and this simple use of futures doesn't compile:
This fails due to ambiguous operators:
While it can be reasonably argued that this is an issue with the
json
class, I think this should be addressed inboost::future<>
too, becausestd::future<>
doesn't have this problemboost::future<>
should arguably work with any movable time(My preferred fix would be to compare to
nullptr
instead, but that can't be done for obvious compatibility reasons. I thought about using implicit bool conversion instead (if (this->future_)
) but then I noticed the many existing uses of.get() == 0
already in there, so opted for continuing in that style.)