On 03/11/2013 11:06 PM, H. S. Teoh wrote:
On Mon, Mar 11, 2013 at 10:31:53PM +0100, Timon Gehr wrote:
On 03/11/2013 09:19 PM, Jonathan M Davis wrote:
On Monday, March 11, 2013 20:14:07 Timon Gehr wrote:
Actually, in D, static if creates its own scopes for declarations
made inside the static if condition.
No, it doesn't,
Yes it does.
Actually, it doesn't, scarily enough:
import std.stdio;
void main() {
int[string] x;
//float x;
static if (is(typeof(x) S : T[U], T, U)) {
writeln(S.stringof);
writeln(T.stringof);
writeln(U.stringof);
}
writeln(S.stringof); // <-- this compiles, and works!!
}
The last writeln will fail to compile if x's type is changed to float
(as in the commented out line).
Meaning that the definitions of S, T, U "leak" past the scope of the
static if. Which makes the semantics of the code very unclear, because
whether or not it even compiles depends on how the static if condition
turns out. :-/
T
Wtf. :)
void main() {
int[string] x;
static if (is(typeof(x) S : T[U], T, U)) { }
pragma(msg, S, " ", T, " ", U);
}
I have checked again and the documentation actually does not specify
this. It just contains suggestive examples.