A dollar identifier is an Identifier
with a $
at the end. In a code-generating construct (mixed-in mixin template
and static foreach
/static foreach_reverse
) the $
is replaced by a number.
For a loop, it is the index of iteration.
For a mixin template, it is the number of mixin templates mixed in up until this point.
Example: loop
enum xs = ["A", "BC", "DEF"];
static foreach (x; xs)
{
size_t l = x.length; // Error on "BC" and "DEF", already defined.
}
enum xs = ["A", "BC", "DEF"];
static foreach (x; xs)
{
size_t l$ = x.length; // Good: becomes `l0`, `l1`, `l2`
}
Example: mixin template
mixin template mixMeIn(T)
{
alias R = int delegate(T);
}
struct S
{
mixin mixMeIn!int; // Okay
mixin mixMeIn!int; // Error, `R` already defined
}
mixin template mixMeIn(T)
{
alias R$ = int delegate(T);
}
struct S
{
mixin mixMeIn!int; // Okay, defines `R0`
mixin mixMeIn!int; // Okay, defines `R1`
}