Purity, @safety, etc., in generic code
Steven Schveighoffer
schveiguy at yahoo.com
Wed Feb 20 20:07:45 PST 2013
On Wed, 20 Feb 2013 21:50:01 -0500, deadalnix <deadalnix at gmail.com> wrote:
> On Wednesday, 20 February 2013 at 13:42:48 UTC, Steven Schveighoffer
> wrote:
>> On Wed, 20 Feb 2013 01:00:00 -0500, deadalnix <deadalnix at gmail.com>
>> wrote:
>>
>>> As discussed previously, I really wonder hy a const and non const
>>> version of a function can exists in a first place. What problem does
>>> it solve that isn't better solved by inout ?
>>
>> const(T) and T are different types. Saying you can overload on types,
>> unless they just vary by const is a special case that I don't think is
>> worth adding.
>>
>
> Explain me how the hell you overload on implicit parameter types ?
A method is simply a function that takes a hidden parameter of an object
or struct.
Really, a method with a signature Obj.foo() is a function with a signature
foo(Obj this)
A const method Obj.foo() const is a function with a signature
foo(const(Obj) this)
So it's equivalent to saying you can overload:
foo(int *x)
foo(const(int) *x)
To disallow this would be unnecessarily restrictive.
-STeve
More information about the Digitalmars-d
mailing list