import std.stdio;
import std.meta;
void main()
{
int nbad;
foreach(T; AliasSeq!(short, ushort))
{
foreach(int i; T.min .. T.max + 1)
{
T x = cast(T)i;
T y = ~x;
T newy = cast(T)~cast(int)x;
if(y != newy)
{
writefln("%s: x: %s, y: %s, newy: %s", T.stringof, x, y, newy);
++nbad;
}
}
}
writeln("Number of affected cases: ", nbad);
}
Output:
onlineapp.d(11): Deprecation: integral promotion not done for `~x`, use '-preview=intpromote' switch or `~cast(int)(x)`
onlineapp.d(11): Deprecation: integral promotion not done for `~x`, use '-preview=intpromote' switch or `~cast(int)(x)`
Number of affected cases: 0
Note that with -de
these become errors. With the -preview=intpromote switch, the uncasted negation compiles and runs as expected.
Right now, the deprecation is telling users under penalty of not compiling to do something that will achieve nothing when intpromote is enabled.
-Steve