On Tue, Jan 24, 2012 at 07:06:47PM -0500, Jonathan M Davis wrote: [...] > So, while a C++ programmer expects that > > int f2() const > > means that f2 is const, they're likely to be surprised by the fact that in > > const int f1() > > it's the int that's const, not f1. [...]
Wait, I thought 'const int f1()' means that 'int f1(const this, ...)', not the other way round? I guess you're trying to say that in C++: const int f(); means the return value is 'const int', but in D: const int f(); means the same thing as 'int f() const', and the return value is 'int'. Is that correct? // Anyway, I find this variable syntax a bit annoying. The basic syntax of a function is: <return type> <func_name>(<args...>) { <body> } But now we have additional modifiers like 'pure', 'lazy', 'const', etc., and syntax becomes: <modifiers> <return type> <func_name>(<args...>) <more_modifiers> { <body> } Which makes sense, since then you can write 'pure int f()' which reads nicely. However, in the case of const, it's very confusing because you're used to writing 'const <typename>' to mean 'const(<typename>)', yet here 'const int f()' means 'const(int f())' rather than 'const(int) f()': class A { const int f(); } auto a = new A; const int x; // typeof(x) == const(int) auto y = a.f(); // typeof(y) == int This is a visual ambiguity with the basic pattern '<return type> <func_name>(...)', which I find very jarring. Should I file an issue for this? :) T -- I think Debian's doing something wrong, `apt-get install pesticide', doesn't seem to remove the bugs on my system! -- Mike Dresser