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
}