www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 1451] New: overloading methods by mixin in static if doesn't work

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1451

           Summary: overloading methods by mixin in static if doesn't work
           Product: D
           Version: 1.020
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: leo.dahlmann gmail.com


<code>
template Foo(T)
{
    void callme(T)
    {

    }
}

class Bar
{
    mixin Foo!(int) F1;
    alias F1.callme callme;

    static if(true)
    {
        mixin Foo!(float) F2;
        alias F2.callme callme;
    }
}

void main()
{
    Bar bar = new Bar;
    bar.callme(cast(int)0); // <- works
    bar.callme(cast(float)0); // <- fails (line 25)
}
</code>

This code fails to compile with these error messages:
test.d(25): function test.Bar.Foo!(int).callme ((int _param_0)) does not match
parameter types (float)
test.d(25): Error: cannot implicitly convert expression (0) of type float to
int

After commenting out the static if it compiles perfectly, like expected.


-- 
Aug 29 2007
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=1451


Alexandre Fournier <af liquidstate.eu> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |af liquidstate.eu
            Version|1.020                       |1.057
         OS/Version|Windows                     |Linux


--- Comment #1 from Alexandre Fournier <af liquidstate.eu> 2010-06-22 03:53:05
PDT ---
<code>
struct A
{
        static A opCall()
        {
                A ret;
                return ret;
        }

        mixin M;
}

template M()
{
        static typeof(*this) opCall(uint i)
        {
                A ret;
                return ret;
        }
}

int main(char[][] args)
{
        A a1 = A();
        A a2 = A(42);
        return 0;
}
</code>

Line 24: function t.A.opCall () does not match parameter types (int)
Line 24: Error: expected 0 arguments, not 1

Still the same bug, simple test case above

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 22 2010