[Issue 4218] New: safe function cannot call opApply
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri May 21 10:33:43 PDT 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4218
Summary: safe function cannot call opApply
Product: D
Version: 2.041
Platform: All
OS/Version: All
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: zan77137 at nifty.com
--- Comment #0 from SHOO <zan77137 at nifty.com> 2010-05-21 10:33:41 PDT ---
This code doesn't work!
--------------------------------------------
struct S{ @safe int opApply(scope int delegate(ref int) dg){return 0;} }
@safe void main()
{
S s;
foreach (x; s) {}
}
--------------------------------------------
@safe delegate can implicit convert to @system delegate.
Following code can compile:
--------------------------------------------
struct S{ @safe void foo(){} }
@safe void main()
{
S s;
void delegate() dg = &s.foo;
}
--------------------------------------------
And of course, "int delegate(ref int) @safe" should convert to "int
delegate(ref int)".
Therefore, safe function should allow to call opApply.
Workaround is here:
--------------------------------------------
struct S{
@safe int opApply(scope int delegate(ref int) dg){return 0;}
@safe int opApply(scope int delegate(ref int)@safe dg){return 0;}
}
@safe void foo()
{
S s;
foreach (x; s) {}
}
@system void main()
{
S s;
foreach (x; s) {}
foo();
}
--------------------------------------------
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list