Static function template

Lemonfiend via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 7 03:46:19 PDT 2015


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.

The current error seemed like it matched the wrong template, 
prompting me to look for a buggy function template implementation.




More information about the Digitalmars-d-learn mailing list