Am 25.05.2012 15:04, schrieb Alex Rønne Petersen:
So I was writing a container class and in some test code, I called
container.clear(). Reasonable enough, right? Hell, it even compiled!
Turns out, my program completely broke at runtime. Apparently, I'd
forgotten to implement clear() on my container class, and
*object.clear() was being called instead*.
I don't blame UFCS for this. It just happened to be the reason this
compiled at all. But, what I do think is: clear is the *ABSOLUTELY MOST
HORRIBLE NAME EVER* for a function that actually finalizes and zeroes an
object. Did it not seem obvious to call it, I don't know, *finalize*?
And even ignoring the naming, having a symbol called clear in the
'global' namespace is absolute insanity.
Am I the only person with this opinion?
I completely agree! Had the same situation before...
Also I hate that UFCS is doing the same thing that properties did in the
beginning and have no way to enforce a specific usage. I strongly
believe that it is a (often important) decision of the library architect
if a function is to be called normally or as member function style.