LWG-1203 More useful rvalue stream insertion #1225
Merged
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.
Fixes #538 by completing LWG-1203 "More useful rvalue stream insertion".
We had already implemented most of this LWG issue resolution, so only the constraints needed to be adjusted. Replacing
is_base_of<ios_base, Stream>withis_convertible<Stream*, ios_base*>implements the "publicly and unambiguously derived" wording in WG21-N4861 [istream.rvalue]/1 and [ostream.rvalue]/1 thanks to [conv.ptr]/3. As a bonus, it also allows us to remove the "avoid infinite recursion" constraintnegation<is_lvalue_reference<Stream>>, because attempting to form a pointer to a reference will SFINAE due to [dcl.ptr]/4 and [dcl.ref]/5.Finally, I crafted a test that fails without this change and passes with it.