On 8/3/18 1:34 PM, kinke wrote:
On Friday, 3 August 2018 at 16:46:53 UTC, Jonathan Marler wrote:
Maybe you could provide an example or 2 to demonstrate why these would be requirements...we may have 2 different ideas on how this would be implemented.

auto foo(/*mutable*/ int x)
{
    return { return ++x; };
}

void main()
{
     auto dg = foo(42);
     auto dg_copy = dg;
     // with the optimization, dg_copy would have its own context
     // in the ptr field, based on the current state in dg (42)

     const r1 = dg();
     const r2 = dg_copy(); // would be 43 with optimization
     assert(r1 == 43 && r2 == 44);
}

You don't even need to make a copy to show problems, the context isn't passed by reference:

const r1 = dg();
const r2 = dg();

assert(r1 == 43 && r2 == 44); // would fail with optimization.

-Steve

Reply via email to