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

Steven Schveighoffer schveiguy at yahoo.com
Mon May 16 13:13:46 PDT 2011


On Mon, 16 May 2011 16:06:34 -0400, KennyTM~ <kennytm at gmail.com> wrote:

> The compiler blindly accepts an 'int' as a 'dchar' argument, not -1. For  
> instance,
>
> void main(){
>      string ret;
>      ret ~= 0x10ffff;  // ok
>      ret ~= 0x110000;  // Error: cannot append type int to type string
>      int i = 0x110000;
>      ret ~= i;         // ok, but should fail at compile time
> }
>
> the issue is also that an 'int' shouldn't be implicitly convertible to a  
> 'dchar'.

Yes, you are completely right, it seems the compiler isn't inconsistent  
WRT string appending and calling a normal function, it fails/passes the  
same way, depending on whether the argument passed is a variable or a  
literal.

So it seems the correct solution is for it to do range propagation, and  
refuse to compile implicit casts where it results in an invalid dchar  
(which includes the case where the int could be anything).

Sorry for the confusion, I thought I tested one thing, and actually tested  
another, yada yada...

-Steve


More information about the Digitalmars-d mailing list