On Saturday, 27 January 2018 at 14:13:49 UTC, kdevel wrote:
I would expect this code

enforce3.d
---
import std.exception;

void main ()
{
   int i = int.min;
   enforce (i > 0);
}
---

to throw an "Enforcement failed" exception, but it doesn't:

$ dmd enforce3.d
$ ./enforce3
[nothing]

I wonder if it's caused by a comparison between signed and unsigned integers.

import std.stdio;

void main ()
{
    int zero = 0;
    writeln(int.min > 0u);
    writeln(int.min > zero);
}

$ rdmd test.d
true
false

The same behavior can be observed in C :

#include <stdio.h>
#include <limits.h>

int main(void)
{
    int zero = 0;
    printf("%d\n", INT_MIN > 0u);
    printf("%d\n", INT_MIN > zero);
    return 0;
}

$ gcc test.c && ./a.out
1
0

Reply via email to