https://issues.dlang.org/show_bug.cgi?id=14694
Vladimir Panteleev <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #2 from Vladimir Panteleev <[email protected]> --- (In reply to Walter Bright from comment #1) > Instead of asking people to carefully examine moderately complex code > looking for a mistake, and wondering how many and which you mean, please be > explicit. Is it not obvious? Here: (In reply to Andrei Alexandrescu from comment #0) > Obvious in retrospect. Repro picked from std.array: > > inout(T)[] overlap(T)(inout(T)[] r1, inout(T)[] r2) @trusted pure nothrow > { > alias U = inout(T); > static U* max(U* a, U* b) nothrow { return a > b ? a : b; } > static U* min(U* a, U* b) nothrow { return a < b ? a : b; } These two nested functions (min and max) have a body. > > auto b = max(r1.ptr, r2.ptr); > auto e = min(r1.ptr + r1.length, r2.ptr + r2.length); > return b < e ? b[0 .. e - b] : null; > } > > After .di generation: > > pure nothrow @trusted inout(T)[] overlap(T)(inout(T)[] r1, inout(T)[] r2) > { > alias U = inout(T); > static nothrow U* max(U* a, U* b); > static nothrow U* min(U* a, U* b); Here, the bodies of the nested functions was stripped. > auto b = max(r1.ptr, r2.ptr); > auto e = min(r1.ptr + r1.length, r2.ptr + r2.length); > return b < e ? b[0..e - b] : null; > } > > Obviously that's not going to work for more than one reason :o). --
