C++ guys hate static_if?

monarch_dodra monarchdodra at gmail.com
Mon Mar 11 15:15:50 PDT 2013


On Monday, 11 March 2013 at 22:08:10 UTC, 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

I think that's bug material. The "is" definition should end at 
the end of that block.


More information about the Digitalmars-d mailing list