<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 22 September 2014 22:14, via Digitalmars-d <span dir="ltr"><<a href="mailto:digitalmars-d@puremagic.com" target="_blank">digitalmars-d@puremagic.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Monday, 22 September 2014 at 11:45:39 UTC, Manu via Digitalmars-d wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Application to scope will be identical to ref. A function that returns or<br>
receives scope that is inserted into generic code must have that property<br>
cascaded outwards appropriately. If typeof() or alias loses 'scope', then<br>
it will all go tits-up.<br>
</blockquote>
<br></span>
For receiving it's not necessary, because whether or not the argument is scoped, the function can always borrow it. The lifetime of its parameter is narrower than what it gets passed.<br></blockquote><div><br></div><div>It's particularly common in D to produce templates that wrap functions.</div><div>If the wrapper doesn't propagate scope outwards, then it can no longer be called by a caller who borrowed arguments which are to be forwarded to the function being called. Likewise for return values.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
For return values, the situation is a bit different: They can of course not be assigned to non-scoped variables. But the solution for this simple: the generic code needs to use scope, too.</blockquote><div><br></div><div>This is precisely the problem with ref...</div><div>Are you saying that ALL generic code needs to be 'scope' always? That's not semantically correct.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> A function that returns scope does so for a reason after all.</blockquote><div><br></div><div>And the generic code can't know what it is. That knowledge must be encoded in the type system.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This will work even if the return value of the called function turns out not to be scoped for this particular instantiation. And all this is an implementation of the generic code, it won't bleed outside, unless the generic code wants to return the scoped value. In this case, simply apply the same technique, just one lever higher.<br></blockquote><div><br></div><div>I can't see the solution you're trying to ilustrate, can you demonstrate?</div></div></div></div>