February 13, 2007 Error: escaping reference to local v | ||||
---|---|---|---|---|
| ||||
// WinXP SP2 with dmd v1.005 - // compile "Error: escaping reference to local v" // It appears the char[x] variables and literals are causing the error... // but this all worked before the dmd v1.005 update. // Is this a bug, or a needed change? private import io = std.stdio; int main() { // literal becomes a char[] char[] vx = "123"c; // No problem char[] sx = giveCharA("char[] vx = \"123\"c", vx); char[3] vy = "123"c; // ** variable char[x], causes the error char[] sz1 = giveCharA("char[3] vy", vy); // ** literal char[x], causes the error char[] sz2 = giveCharA("123\"c", "123"c); // no problems, duping makes it char[] char[] sz3 = giveCharA("\"123\".dup", "123".dup); // no problems, slicing makes it char[] char[] sz4 = giveCharA("vy[0..3]", vy[0..3]); return 0; } template giveCharA(T) { char[] giveCharA(in char[] s, in T v) { io.writefln("variable=\"%s\", value=\"%s\"", s, v); return v; } } /+ WinXP SP2 dmd v1.004 (and older versions) output: ---------------------------- C:\dmd>dmd local.d C:\dmd\bin\..\..\dm\bin\link.exe local,,,user32+kernel32/noi; C:\dmd>local variable="char[] vx = "123"c", value="123" variable="char[3] vy", value="123" variable="123"c", value="123" variable=""123".dup", value="123" variable="vy[0..3]", value="123" C:\dmd> =========== WinXP SP2 dmd v1.005 output: ---------------------------- C:\dmd>dmd local.d local.d(31): Error: escaping reference to local v local.d(15): template instance local.giveCharA!(char[3]) error instantiating C:\dmd> The following two lines in the code, now cause error above char[] sz1 = giveCharA("char[3] vy", vy); char[] sz2 = giveCharA("123\"c", "123"c); +/ David L. |
Copyright © 1999-2021 by the D Language Foundation