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?