Strange implicit conversion integers on concatenation

Steven Schveighoffer schveiguy at gmail.com
Tue Nov 13 14:51:39 UTC 2018


On 11/12/18 3:23 PM, Andrei Alexandrescu wrote:
> On 11/12/18 3:01 PM, 12345swordy wrote:
>> On Monday, 5 November 2018 at 15:36:31 UTC, uranuz wrote:
>>> Hello to everyone! By mistake I typed some code like the following 
>>> without using [std.conv: to] and get strange result. I believe that 
>>> following code shouldn't even compile, but it does and gives 
>>> non-printable symbol appended at the end of string.
>>> The same problem is encountered even without [enum]. Just using plain 
>>> integer value gives the same. Is it a bug or someone realy could rely 
>>> on this behaviour?
>>>
>>> import std.stdio;
>>>
>>> enum TestEnum: ulong {
>>>    Item1 = 2,
>>>    Item3 = 5
>>> }
>>>
>>> void main()
>>> {
>>>     string res = `Number value: ` ~ TestEnum.Item1;
>>>     writeln(res);
>>> }
>>>
>>> Output:
>>> Number value: 
>>
>> Welp with the recent rejection of the DIP 1005, I don't see this being 
>> deprecated any time soon.
>>
> 
> If we deprecate that we also need to deprecate:
> 
>      string res = `Number value: ` ~ 65;
> 
> Not saying we shouldn't, just that there are many implications.

I'm wondering if you realized what you are saying there. Like "if we 
deprecate one crappy behavior, we have to deprecate all the crappy behavior"

Yes, please.

-Steve


More information about the Digitalmars-d mailing list