[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