Error: escaping reference to local v
David L. Davis
SpottedTiger at yahoo.com
Tue Feb 13 13:04:12 PST 2007
// 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.
More information about the Digitalmars-d-bugs
mailing list