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