Typed variadic template syntax?

Ilya Yaroshenko ilyayaroshenko at gmail.com
Thu Jan 30 09:16:55 PST 2014


On Thursday, 30 January 2014 at 17:13:21 UTC, Ilya Yaroshenko 
wrote:
> On Thursday, 30 January 2014 at 15:28:34 UTC, Timon Gehr wrote:
>> On 01/30/2014 03:08 PM, Ilya Yaroshenko wrote:
>>>>
>>>> 2) `foreach` creates it's own scope. This won't work:
>>>>   foreach(i; TypeTuple!(1,2,3)){
>>>>       mixin("int num"~i.stringof~";");
>>>>   }
>>>>   num1=1;
>>>>   num2=2;
>>>>   num3=3;
>>>>   writeln(num1,num2,num3);
>>>
>>> ...
>>> 2) no. This should work for compile time foreach and 
>>> TypeTuples. There
>>> are many examples in source code of Phobos.
>>
>> The following code fails to compile:
>>
>> import std.typetuple, std.stdio;
>> void main(){
>>    foreach(i; TypeTuple!(1,2,3)){
>>        mixin("int num"~i.stringof~";");
>>    }
>>    num1=1;
>>    num2=2;
>>    num3=3;
>>    writeln(num1,num2,num3);
>> }
>
> I am wrong, foreach always has own scope
>
>     foreach(S; TypeTuple!(string, wstring, dstring))
>     {
>         import std.conv : to;
>         S a = " a     bcd   ef gh ";
>         assert(equal(splitter(a), [to!S("a"), to!S("bcd"), 
> to!S("ef"), to!S("gh")]));
>         a = "";
>         assert(splitter(a).empty);
>     }
>
>
> You can use mixin and format instead:
>
> import std.typetuple, std.stdio;
> void main(){
>     mixin(format("%(int num%s; %);", [1,2,3])); //<----
>     num1=1;
>     num2=2;
>     num3=3;
>     writeln(num1,num2,num3);
> }

import std.string; =)


More information about the Digitalmars-d mailing list