On Thu, 07 May 2015 10:46:19 +0000
Lemonfiend via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com>
wrote:

> On Thursday, 7 May 2015 at 10:43:28 UTC, Daniel Kozak wrote:
> > On Thursday, 7 May 2015 at 10:39:09 UTC, Daniel Kozák wrote:
> >>
> >> On Thu, 07 May 2015 10:33:44 +0000
> >> Vadim Lopatin via Digitalmars-d-learn
> >> <digitalmars-d-learn@puremagic.com> wrote:
> >>
> >>> struct S
> >>> {
> >>>     int i;
> >>> 
> >>>     auto foo2(T)(int j) {
> >>>         i=j;
> >>>     }
> >>> 
> >>>     static S foo(T)(int j) {
> >>>         S s;
> >>>         s.foo2!T(j);
> >>>         return s;
> >>>     }
> >>> }
> >>> 
> >>> void main()
> >>> {
> >>>     auto s = S.foo!bool(1);
> >>> }
> >>
> >> As I said, it is not bug. It is OK. There is no way how you can
> >> distinguish between static and non static methods or even 
> >> field in some
> >> cases.
> >
> > e.g.:
> >
> > import std.stdio;
> >
> > struct S
> > {
> >     string foo = "Please select me?";
> >     string foo() { return ("No, select me?"); };
> >     static string foo() { return ("I am better than the otters 
> > :D?"); };
> > }
> >
> > void main()
> > {
> >     auto s = S();
> >     writeln(s.foo);
> > }
> 
> Well it's clear to me now why it shouldn't work.
> 
> However, the error msg is not clear on the problem. Imo it should 
> give a conflict error like in your previous example. That would 
> make it clear what's happened/allowed.
> 

Yep, I think you are right even this example make useless and
wrong error message:

struct S
{
    static S foo(T)(int j) {
        S s;
        return s;
    }
    static S foo(T)(int j) {
        S s;
        return s;
    }
}

void main()
{
    auto s = S.foo!bool(1);
}


test.d(15): Error: need 'this' for 'foo' of type '(int j)' // WTF?





Reply via email to