"Competitive Advantage with D" is one of the keynotes at C++Now 2017

Patrick Schluter via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Sat Apr 29 04:24:36 PDT 2017


On Friday, 28 April 2017 at 22:11:30 UTC, H. S. Teoh wrote:
> The latest WAT I found in D is this one, see if you can figure 
> it out:
>
> 	char ch;
> 	wchar wch;
> 	dchar dch;
>
> 	pragma(msg, typeof(true ? ch : ch));	// char - OK
> 	pragma(msg, typeof(true ? ch : wch));	// int - WAT?
> 	pragma(msg, typeof(true ? wch : wch));	// wchar - OK
> 	pragma(msg, typeof(true ? wch : dch));	// uint - WAT?
> 	pragma(msg, typeof(true ? dch : dch));	// dchar - OK
>
> How an alternation between two character types ends up being 
> int is beyond me, but even more inscrutible is why ch : wch 
> produces int but wch : dch produces uint.

That's the C integer promotion rule, nothing suprising here.

C99 says "if an int can represent all values of the original 
type, the value is converted to an int; otherwise, it is 
converted to an unsigned int."

While quite often surprising for people coming from other 
languages, I think that Walter's persistence in following the 
basic C rule is a good thing.
Maybe the documentation should cite more prominently from the C 
standard on that point. While it is quite obvious, I noticed that 
a lot of people do not know how it works.



More information about the Digitalmars-d-announce mailing list