Just lost the best part of an hour figuring the cause of this small problem, consider: void main() { uint j = 42; ulong k = 1<<cast(ulong)j; ulong m = 1UL<<j; assert(k == 1024);//both asserts do pass assert(m == (1UL<<42)); } I though left operand should be promoted to the largest integer in shift expression, isn't it? -- Dmitry Olshansky