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.