[dcl.type.auto.deduct] Make f1
example well-formed
#7683
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.
@W-E-Brown reports that in the example in [dcl.type.auto.deduct], my P2266 "Simpler implicit move" introduced an example which, while correct in the point it's illustrating, is ill-formed for another reason.
GCC rightly complains about
f1
:That is, the Standard's example is correct that
f1
's deduced return type isint&
, but then the function body is ill-formed because you can't bind thatint&
to the rvalue expression(x)
.f1
's function body exists at all here only to create a sort of tutorial parallelism tof2
. We can discard that parallelism; thenf1
becomes well-formed, while still illustrating the same point.Question for discussion: Walter also points out that even though
f2
is well-formed, it invariably returns a dangling reference to function parameterx
. (GCC correctly detects this, and warns.) Is this a bad thing? If it is a bad thing, then can anyone think of a way to adjust the example so that it still illustrates something useful here, but doesn't have a dangling reference?