Template mixin Instantiation

Adam D. Ruppe via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed May 25 05:15:17 PDT 2016


On Wednesday, 25 May 2016 at 07:45:32 UTC, Jorge Lima wrote:
> 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?

It is just the difference between an alias argument and an 
ordinary value use.

When passing a name to an alias argument, it retains its identity 
- `a` in there is now just another name for `array1`. When you 
`.stringof` it, it sees `a` is an alias for `array1` and pulls it 
instead.

I suspect you don't actually mean `.stringof` here... that gives 
the string representation of the identifier; it is what you see 
in the source (sort of), not the string of the value. 
`writeln(array)` would make it print out the value of the array.


Anyway, if you pass `a` to an ordinary function, like the struct 
constructor, it is then interpreted as a value instead of as a 
name of a variable and works the same way as the literal.

The difference is just on the outside, you aliased a name in one 
place and a literal in the other place, so that's why .stringof 
gave different results.


More information about the Digitalmars-d-learn mailing list