To help LDC/GDC

tn no at email.com
Tue Apr 9 04:30:41 PDT 2013


On Tuesday, 9 April 2013 at 08:33:53 UTC, Manu wrote:
> On 9 April 2013 18:04, Dicebot <m.strashun at gmail.com> wrote:
>
>> On Tuesday, 9 April 2013 at 07:57:37 UTC, Manu wrote:
>>
>>> Are you saying the example above is not actually valid code?
>>>
>>> struct Foo {
>>>     int a = 0;
>>>     pure int bar( int n ) { // Weakly pure
>>>         a += n;
>>>         return a;
>>>     }
>>> }
>>>
>>> That's not pure. Call it twice with the same args, you'll 
>>> different
>>> answers. How can that possibly be considered pure in any 
>>> sense?
>>> And it's useless in terms of optimisation, so why bother at 
>>> all? What does
>>> it offer?
>>>
>>
>> It is valid code. It is "weak pure". "pure' keyword means both
>> "strong pure" or "weak pure" depending on function body. Crap.
>>
>
> How can 'weak pure' reasonably be called any kind of 'pure'? 
> It's not pure
> at all. The function returns a completely different result when 
> called
> twice.

The returned results are different because the parameters you are 
calling it with are different. Note that for member functions 
'this' is also passed implicitly as a ref parameter. On the 
second call it has different value than on the first call. If you 
don't want to allow mutating 'this' you should make the function 
const, thus making the implicit 'this' parameter const ref.


More information about the Digitalmars-d mailing list