Annoyance with new integer promotion deprecations

H. S. Teoh hsteoh at quickfur.ath.cx
Mon Feb 5 20:45:22 UTC 2018


On Mon, Feb 05, 2018 at 03:23:20PM -0500, Steven Schveighoffer via Digitalmars-d wrote:
> On 2/5/18 2:30 PM, H. S. Teoh wrote:
> > Even better yet:
> > 
> > 	byte b;
> > 	b = -b;		// Deprecation error
> > 
> > WAT????
> 
> In the future, -b will be typed as an int, so you can't reassign it to
> b.  You can see this today with -transition=intpomote:
> 
> Error: cannot implicitly convert expression -cast(int)b of type int to
> byte
[...]

Honestly, this just makes narrow int types basically useless when it
comes to any arithmetic at all.

Sticking to C promotion rules is one of the scourges that continue to
plague D; another example is char -> byte confusion no thanks to C
traditions:

	int f(dchar ch) { return 1; }
	int f(byte i) { return 2; }
	void main() {
		pragma(msg, f('a'));
		pragma(msg, f(1));
	}

Exercise for reader: guess compiler output.


T

-- 
Trying to define yourself is like trying to bite your own teeth. -- Alan Watts


More information about the Digitalmars-d mailing list