https://issues.dlang.org/show_bug.cgi?id=14820
Issue ID: 14820
Summary: Templates not reevaluated inside static loop unrolling
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: [email protected]
Reporter: [email protected]
The summary text might be wrong as I'm not sure what the root cause is. The
template is just evaluated on the first loop even though the underlying value
changes:
The following code:
template TypeOf(alias T) {
pragma(msg, "TypeOf evaluated with ", T.stringof);
alias TypeOf = typeof(T);
}
void main() {
import std.typetuple;
foreach(type; TypeTuple!(int, short))
{
type a;
pragma(msg, "loop:")
pragma(msg, " type: ", type);
pragma(msg, " a: ", typeof(a));
alias t = TypeOf!a;
pragma(msg, " TypeOf: ", t);
}
}
Produces the following output:
loop:
type: int
a: int
TypeOf evaluated with a
TypeOf: int
loop:
type: short
a: short
TypeOf: int
Notice that the TypeOf template is only evaluated for the first pass through
the loop.
--