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
