make all non-forking rvalue awaitables movable#271
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The following rvalue-awaitable types have been made movable:
The purpose of this is to make all of them safe to capture as a temporary into another awaitable group which wraps them into a task by taking them as an argument. When this happens, they will be bound as values, so their lifetime is the same as the task.
After this, the only remaining non-movable rvalue-awaitables are those produced by an explicit fork primitive. For those, the rule remains as-before; you must assign them to a named variable before wrapping them into an awaitable group:
(this fork behavior could be considered a footgun, and I'm considering making these lvalue awaitables, but that would be a substantial breaking change, so not today)