---
module Test;
import std.stdio;
int main()
{
writeln("should not be -1: ",a(-1));
return 0;
}
short a(short b) pure nothrow
{ return b>>>1; }
static assert(a(-1)==-1);
---
>\dev\dmd\bin\dmd tmp.d -I.. -oftmp.exe -w
warning - tmp.d(32): Error: implicit conversion of expression (cast(int)b >>> 1) of type int to short can cause loss of data
tmp.d(43): Error: cannot evaluate a(cast(short)-1) at compile time
tmp.d(43): Error: static assert (cast(int)a(cast(short)-1) == -1) is not evaluatable at compile time
>tmp
'tmp' is not recognized as an internal or external command,
operable program or batch file.
>\dev\dmd\bin\dmd tmp.d -I.. -oftmp.exe
c:\dev\d\win>tmp
should not be -1: -1
Comment #1 by clugdbug — 2009-07-10T08:00:53Z
In DMD2.031, CTFE and -w no longer makes any difference to the behaviour: it now _always_ generates an error.