On 05/21/2015 09:36 PM, Meta wrote:
On Thursday, 21 May 2015 at 16:11:30 UTC, Timon Gehr wrote:
On 05/21/2015 05:37 PM, Dicebot wrote:
On Thursday, 21 May 2015 at 15:30:59 UTC, Alex Parrill wrote:
They aren't types themselves, so `TypeTuple!(int, char) var` doesn't
make sense.

Sadly, you are wrong on this one - this is actually a valid variable
declaration which will create two distinct local variables and uses
their aliases in resulting symbol list named 'var'.

A wacky property of such variable declarations is this one:

import std.stdio;
alias Seq(T...)=T;

void main(){
    char y='a';
    Seq!(char,char) x=y++;
    writeln(x);
}
...

Certainly weird and unexpected behaviour.

What happens is that the syntax tree of the initializer is copied.

UDA's also do this:

import std.stdio;
alias I(alias a)=a;
void main(){
    int x;
    @(x++) struct S{};
    __traits(getAttributes,S);
    writeln(x); // 1
    @(__traits(getAttributes,S),__traits(getAttributes,S)) struct T{}
    writeln(x); // 1
    __traits(getAttributes,T);
    writeln(x); // 3
}

Reply via email to