[Issue 4304] New: default arguments using delegates of a global object no longer work

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jun 13 09:48:57 PDT 2010


http://d.puremagic.com/issues/show_bug.cgi?id=4304

           Summary: default arguments using delegates of a global object
                    no longer work
           Product: D
           Version: D1
          Platform: Other
        OS/Version: Mac OS X
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody at puremagic.com
        ReportedBy: fawzi at gmx.ch


--- Comment #0 from Fawzi Mohamed <fawzi at gmx.ch> 2010-06-13 09:48:53 PDT ---
with dmd 1.062
{{{
class A{
    int f(int a){
        return a;
    }
    static A defaultA;
    static this(){
        defaultA=new A();
    }
}

void f(int delegate(int) arg=&A.defaultA.f){
    arg(2);
}

void defaultCall(){
    f();
}
}}}

fails with Error: cannot inline default argument &defaultA.f

whereas it did work previously.

This might be indeed correct if the compiler cannot guarantee that the correct
value of defaultA is used (i.e. after the static initializer).

It seemed to work correctly in my use case, and the fact that setting defaultA
to another value is most probably not "seen" by default value shows that using
null as default value, and an 
    if (arg is null) arg=&A.defaultA.f;
in the body is probably a better solution.

I still submit it here, but most likely this change is a feature, not a bug.

-- 
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