On Sunday, 23 June 2013 at 10:09:39 UTC, Jonathan M Davis wrote:
On Sunday, June 23, 2013 12:02:42 Namespace wrote:
> I don't see what's so terrible about it

It's bug prone.

class Foo {
public:
        static void test1() { }
        void test2() { }
}

Foo f;
f.test1(); /// Oh nice, that works, f is not null.
f.test2(); /// WTF? f is null?

I fail to see what's bug-prone about that. It's confusing, but it's not
causing any bugs.

Also I don't know why I should call static methods from an
instance. What's the purpose?

It's stupid and pointless as far as I can tell, but I believe that C++, Java, C#, and D all do it, so as stupid as it is, it's a common stupidity. I certainly wish that we could change it, but I wouldn't expect Walter to agree to the change, since it would break at least some existing code, and I suspect that he doesn't consider the fact that you can call static functions on instances to be a problem. That's not the sort of thing that he generally seems to think is an issue. It's almost always stuff that causes actual bugs that he agrees to change and not things that are aesthetically displeasing or
which could theoretically cause bugs.

- Jonathan M Davis

C++ doesn't allow it. I don't know about the rest.

If anything, I find overloading static non static could make sense:

A.print(); //"I'm an A!"
a.print(); //"I'm an A called foo!"

With this in mind, it can mean that a struct can first define the static function, and in the future, add extra logic to handle information from a specific instance, yet without having to caller code.

Reply via email to