On Fri, Sep 25, 2020 at 05:58:08PM +0000, 60rntogo via Digitalmars-d-learn 
wrote:
> On Friday, 25 September 2020 at 15:21:22 UTC, Steven Schveighoffer wrote:
> > If the input is not ref, you should not return by ref, because then
> > you would be returning a reference to local stack data that is about
> > to be destroyed.
> 
> Yes, I understand that. What I'm really after at this point is that I
> would like to write a clever mixin that would handle all of these
> decisions for me. It should generate a function that takes arguments
> and returns the result by value or const reference depending on what
> is more appropriate for the given types. I was under the impression
> that this could be accomplished using in or some other qualifiers.

You probably need to use the long-form of templates, with separate
function declarations, to accomplish this. E.g.:

        template myFunc(Args...) {
                static if (shouldReturnByRef!Args)
                        ref ReturnType myFunc(Args args) {
                                ... // implementation here
                        }
                else // non-ref return
                        ReturnType myFunc(Args args) {
                                ... // implementation here
                        }
        }

The reason is that `ref` return is an attribute of the *function*, not
the return type, so you can't just use an `auto` return type and have
the compiler infer it.


T

-- 
What doesn't kill me makes me stranger.

Reply via email to