Static function template
Daniel Kozák via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu May 7 04:08:33 PDT 2015
On Thu, 07 May 2015 10:46:19 +0000
Lemonfiend via Digitalmars-d-learn <digitalmars-d-learn at 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 at 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?
More information about the Digitalmars-d-learn
mailing list