January 17, 2012
The following code compiles without error:

	class C {
		int x;

		// what does 'pure void' mean??
		pure void f() {
			x++;		// why is this legal?
		}
	}

What does 'pure' mean when applied to a member function? Based on Andrei's book, 'pure' means that the function's result depends only on its input. And based on the fact this code compiles, I deduced that 'this' is included as part of the function's input.

However, the function is clearly changing one of its inputs (changing a member of 'this'). Furthermore, what on earth is 'pure void' supposed to mean and why does the compiler accept it?

Changing the function to read:

	pure int f() { return x++; }

also compiles without any complaint from the compiler. Yet calling
writeln() from within f() produces an error. Why?


T

--
Computerese Irregular Verb Conjugation: I have preferences.  You have biases.  He/She has prejudices. -- Gene Wirchenko
January 17, 2012
On Tuesday, 17 January 2012 at 05:16:33 UTC, H. S. Teoh wrote:
> The following code compiles without error:
>
> 	class C {
> 		int x;
>
> 		// what does 'pure void' mean??
> 		pure void f() {
> 			x++;		// why is this legal?
> 		}
> 	}
>
> What does 'pure' mean when applied to a member function?

This is a weakly pure function usable by strongly pure functions. Namely it is a helper function to those that can claim to be strongly pure.

Maybe bearophile's blog will shed some light:

http://leonardo-m.livejournal.com/99194.html

Or stackoverflow:

http://stackoverflow.com/questions/5812186/pure-functional-programming-in-d

> Furthermore, what on earth is 'pure void' supposed to
> mean and why does the compiler accept it?

Well it can only be useful as a weakly pure function as those are allowed to modify their arguments.

In any case, if the function was strongly pure:

pure void foo() {}

any call to it would just be eliminated as having no side effects.