On 5/24/22 4:46 PM, jmh530 wrote:
In the code below, `x` and `y` are implicitly converted to `uint` and
`ushort` before the function preconditions are run.
Is there any way to change this behavior? It feels unintuitive and I
can't find in the spec where it says when the conversions in this case
occur, but it clearly happens before the preconditions are run.
```d
import std.stdio: writeln;
void foo(uint x)
in (x >= 0)
{
writeln(x);
}
void foo(ushort x)
in (x >= 0)
{
writeln(x);
}
void main() {
int x = -1;
foo(x); //prints 4294967295
short y = -1;
foo(y); //prints 65535
}
```
```d
// e.g.
foo(int x)
in (x >= 0)
{
return foo(uint(x));
}
```
And remove those useless `in` conditions on the unsigned versions, an
unsigned variable is always >= 0.
-Steve