should int/short/byte implicitly cast to dchar/wchar/char?

KennyTM~ kennytm at gmail.com
Mon May 16 12:47:55 PDT 2011


On May 17, 11 02:25, Steven Schveighoffer wrote:
> On Mon, 16 May 2011 13:51:55 -0400, Steven Schveighoffer
> <schveiguy at yahoo.com> wrote:
>
>> Currently, this works:
>>
>> void foo(dchar i)
>> {
>> }
>>
>> void main(string[] args)
>> {
>> foo(args.length);
>> }
>
> Damn, this originally started out as argc and argv, and I forgot how D
> accepts arguments, so I switched it to this. Unsigned ints are
> convertable to dchar, but signed ones are not (except for a couple
> cases, which doesn't make sense).
>
> For example, this fails:
>
> dchar c = -1;
> foo(-1);
>

This fails because the compiler can check in compile-time that 
0xffff_ffff is > 0x10_ffff....

> But this passes:
>
> int i = -1;
> dchar c = i;

....but this cannot. 'dchar' should be treated as lower-rank than 'int' 
and use value-range propagation on it.

>
> So clearly there are some inconsistencies that need to be fixed, but the
> situation is not as bad as I thought it was.
>
> -Steve



More information about the Digitalmars-d mailing list