You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With decltype(auto) r = func(); the return from a function can be perfectly captured.
With the change in 0.8, we have now -> foward _ = {...} for perfect return type forwarding. We could enable the same for perfect capturing. E.g.:
r: forward _ = func(x);
use_r(r);
Edit1:
As @JohelEGP mentioned forward r: _ = func(x); would be more consistent. Edit1_end
Why is this required?
If use_r is declared as use_r: (inout r) = {...} then the direct return forwarding use_r(func(x)) is not always possible. If func(x) returns a value it can not be bound to a reference.
My use case:
I kind of need this in the regular expression implementation. My matching context is always captured as an inout value. I do not want to have copies of this value. For the lookbehind implementation and nested versions of lookbehind and lookforward, I need to convert the context into itself or a reverse context. So one is a reference and one is a new object. For these cases I need decltype(auto) r = ....
I circumvented the issue currently by relaxing the inout ctx to forward ctx on the generated functions. But then I had to add a hack to prevent forwarding of ctx by adding a _ = ctx; at the end of the function.
I tried to find the location in cppfront where this is implemented, but could not find it. With a hint I would be filling to create a PR.
The text was updated successfully, but these errors were encountered:
With
decltype(auto) r = func();
the return from a function can be perfectly captured.With the change in 0.8, we have now
-> foward _ = {...}
for perfect return type forwarding. We could enable the same for perfect capturing. E.g.:Edit1:
As @JohelEGP mentioned
forward r: _ = func(x);
would be more consistent.Edit1_end
Why is this required?
If
use_r
is declared asuse_r: (inout r) = {...}
then the direct return forwardinguse_r(func(x))
is not always possible. Iffunc(x)
returns a value it can not be bound to a reference.My use case:
I kind of need this in the regular expression implementation. My matching context is always captured as an
inout
value. I do not want to have copies of this value. For the lookbehind implementation and nested versions of lookbehind and lookforward, I need to convert the context into itself or a reverse context. So one is a reference and one is a new object. For these cases I needdecltype(auto) r = ...
.I circumvented the issue currently by relaxing the
inout ctx
toforward ctx
on the generated functions. But then I had to add a hack to prevent forwarding ofctx
by adding a_ = ctx;
at the end of the function.I tried to find the location in cppfront where this is implemented, but could not find it. With a hint I would be filling to create a PR.
The text was updated successfully, but these errors were encountered: