Why typedef's shouldn't have been removed :(

Christophe travert at phare.normalesup.org
Wed May 9 05:29:23 PDT 2012


"Mehrdad" , dans le message (digitalmars.D:166381), a écrit :
> On Monday, 7 May 2012 at 20:25:35 UTC, Steven Schveighoffer wrote:
>> On Mon, 07 May 2012 15:48:22 -0400, Mehrdad 
>> <wfunction at hotmail.com> wrote:
>>
>> I'm looking at this:
>>
>> m += 5; // ok
>> m = m + 5; // error
>>
>> And thinking, hm.. this is no good :)
> 
> Yeah, that means they were implemented poorly. :P
> It should've been an error for both, because neither of them make 
> sense.
> I don't see why the first one couldn't have been an error though, 
> so I guess I'll have to dig up old threads on why the first one 
> wasn't disallowed, since I can't see why we couldn't just 
> disallow it right there...

One reason could be this :
mint, just like int has an opOpAssign!"+" with takes an int, so "m += 
5" is valid...

Using any other rule raises a lot of questions:
 - Should all operators of typedef-type with its base-type parameter be 
rewritten to take a typedef-type ?
 - What about returned type?
 - What about methods that are not operators?
 - What about free functions?
 - If something is implicitely castable/promoted to the base type, 
should it be implicitely castable to the typedef ?

What choice of typedef would you make?

size_t is a good example of why typedef is poor.
Should this compile, and if it does, what is the type of the result of 
the operations ?

typedef uint size_t;
size_t a, b;
a - b;
-b;
a * b;
a * 2;
a * -2;
a * 2u;

I don't think typedef if a good solution to implement a type safe 
size_t.

Solutions may be found in typesafe langages, but things are not as 
obvious as you would like them to be.

-- 
Christophe


More information about the Digitalmars-d mailing list