| |
 | Posted by Steven Schveighoffer in reply to Ola Fosheim Grostad | Permalink Reply |
|
Steven Schveighoffer 
Posted in reply to Ola Fosheim Grostad
| On 5/18/21 4:07 PM, Ola Fosheim Grostad wrote:
> On Tuesday, 18 May 2021 at 20:01:15 UTC, Steven Schveighoffer wrote:
>> I don't pretend to understand most of this, it was other sleuths (mostly Paul Backus) that discovered this.
>
> I am not sure if my understanding of the language reference is correct, but I get a feeling this is an area where one just have to try different combinations and see what happens.
>
>
No, it was correct before the hack. Code which captured a struct that would be destroyed outside the scope just wouldn't compile. Now it does.
An example:
struct S
{
bool destroyed = false;
~this() { destroyed = true; }
}
void main()
{
void delegate() dg;
{
S s;
dg = {writeln("destroyed = ", s.destroyed);};
dg(); // destroyed = false
}
dg(); // destroyed = true
}
So basically, depending on when you call the delegate, the thing could be invalid. Not a big deal (maybe?) for a boolean, but could cause real problems for other things. And the user expectation is that when you capture the variable, it's how it was when you captured it. At least it should live as long as the delegate is alive, no?
-Steve
|