On Tuesday, 9 April 2013 at 08:33:53 UTC, Manu wrote:
On 9 April 2013 18:04, Dicebot <[email protected]> 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.