July 17, 2006
http://d.puremagic.com/issues/show_bug.cgi?id=256

           Summary: Implicit unsigned to signed doesn't always work.
           Product: D
           Version: 0.162
          Platform: PC
               URL: http://www.digitalmars.com/d/type.html
        OS/Version: Windows
            Status: NEW
          Keywords: rejects-valid
          Severity: minor
          Priority: P3
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: jpelcis@gmail.com


According to the D spec, a signed type can be implicitly converted to its equivalent unsigned type (see Types, Implicit Conversions).  Testing shows that that isn't always true.

---------------------------

void main () {
        ubyte byteValue = cast(byte)-1;
        ushort shortValue = cast(short)-1;
        uint intValue = cast(int)-1;
        ulong longValue = cast(long)-1;
}

---------------------------

C:\programs>dmd test.d
test.d(2): cannot implicitly convert expression (cast(byte)-1) of type byte to
u
byte
test.d(3): cannot implicitly convert expression (cast(short)-1) of type short
to
 ushort

---------------------------

As you can see, only the uint and ulong parts can be successfully compiled. Casting explicitly to unsigned type still works.


-- 

August 12, 2006
http://d.puremagic.com/issues/show_bug.cgi?id=256


bugzilla@digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED




------- Comment #1 from bugzilla@digitalmars.com  2006-08-11 19:14 -------
Fixed DMD 0.164 (revised documentation to reflect intended behavior)


--