On Tuesday, 9 April 2013 at 08:33:53 UTC, Manu wrote:
On 9 April 2013 18:04, Dicebot <m.stras...@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.

Reply via email to