On Friday, 27 April 2012 at 06:14:13 UTC, H. S. Teoh wrote:
Is this a bug? Code:

        import std.stdio;

        struct S {
                static int func(int x) { return x+1; }
                int func(int x) { return x+2; }
        }

        void main() {
                S s;
                writeln(s.func(1));
        }

DMD (latest git) output:

test.d(10): Error: function test.S.func called with argument types:
                ((int))
        matches both:
                test.S.func(int x)
        and:
                test.S.func(int x)

The error message is unhelpful, but basically the complaint is that the
static method is conflicting with the non-static method.

But I would've thought it is unambiguous; I'd expect that s.func should resolve to the non-static method, and S.func to the static method. After all, no object is needed to invoke the static method, and the static
method cannot be invoked without an object.


T


I always thought that D follows the same rules as Java, C++ and C# have. Meaning you can use an instance object to call a static method, even though it is not needed.

As such the call becomes ambiguous, because the compiler won't know what it supposed to call.

I tried to look in the language reference, but did not find a clear explanation for this, but I would expect such scenarios to be forbidden. This type of code is a pain to maintain if it is allowed.

--
Paulo


Reply via email to