Implicit integer conversions Before Preconditions
Steven Schveighoffer
schveiguy at gmail.com
Tue May 24 21:05:00 UTC 2022
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
More information about the Digitalmars-d-learn
mailing list