On Monday, 11 March 2013 at 21:31:53 UTC, 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.
No... It doesn't. He just showed you.
and it would be _way_ less useful if it did,
I don't think so.
Half the code in phobos would be broken.
particularly with
regards to struct and class definitions. Take this code, for
instance,
import std.stdio;
static if(true)
int var = 7;
else
string var = 12;
void main()
{
int i = var;
static if(is(typeof(var) == int))
int j = 22;
else
float j;
writeln(j);
}
It compiles just fine and prints 22. Both the static if at
module-level and the
one in the function declare variables which are used outside
of the static if
blocks. static if does _not_ create a new scope. And putting
braces around the
static if bodies has no effect on the scoping either.
...
What is the point? Your example code does not make any
declaration inside the static if condition.
What *are* you talking about??? I can count 4 declarations in 2
static ifs? What is your definition of "declaration" and "scope".
There's a misunderstanding somewhere here. Can YOU show us an
example where there is a declaration that is scoped?