Template mixin Instantiation
Jorge Lima via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed May 25 00:45:32 PDT 2016
Can someone explain me why in the following code the alias
parameter expands differently for first and second Instantiation?
module main;
import std.stdio;
import std.conv;
struct Cascade {
this(int a, immutable(Cascade)[] b)
{
f1 = a;
f2 = b;
}
this(int a)
{
f1 = a;
f2 = null;
}
int f1;
immutable(Cascade)[] f2;
}
immutable Cascade [] array1 = [
Cascade(1),
Cascade(2),
Cascade(3),
Cascade(3)
];
mixin template StaticArr(alias a) {
immutable(typeof(a[0]))[a.length] array = a;
string repr = a.stringof;
void printIt()
{
writeln(repr);
}
}
int main()
{
mixin StaticArr!(array1) x;
mixin StaticArr!([
Cascade(10),
Cascade(20, array1)]) y;
x.printIt();
y.printIt();
return 0;
}
Running the program prints:
array1
[Cascade(10, null), Cascade(20, [Cascade(1, null), Cascade(2,
null), Cascade(3,
null), Cascade(3, null)])]
I can understand that array1 is not expanded to its value
representation in the first call, but why is then when passed as
an argument to the Constructor of the literal argument in the
second call? Am I missing something obvious?
Thanks,
Jorge
More information about the Digitalmars-d-learn
mailing list