typedefs are useless

Kirk McDonald kirklin.mcdonald at gmail.com
Mon Dec 3 10:46:12 PST 2007


Steven Schveighoffer wrote:
> This may have arisen somewhere before, but...
> 
> Let's say I want a way to create a type that's like a long, but is not 
> implicitly convertable from a long.
> 
> I can do:
> 
> typedef long mytype;
> 
> However, I can't create literals of this type.  so if I want to initialize a 
> mytype value to 6, I have to do:
> 
> mytype x = cast(mytype)6L;
> 
> And if I want to scale a mytype value, I can do:
> 
> x *= 6;
> 
> but if I wanted to create a scaled value of another mytype value, this is 
> illegal:
> 
> x = y * 6;
> 
> So in order to get this to work, I have to do:
> 
> x = y * cast(mytype)6;
> 
> which is really cumersome, when what I want is a integral type that is 
> semantically different from the integral type it's based on.  But I want 
> literals of the base type to implicitly convert to my type so I don't have 
> these ugly casts.
> 
> Note that an enum is EXACTLY the same as a typedef, with the added feature 
> that an enum can have const values of itself accessible as members.  In that 
> regard, why would anyone use a typedef when it is a less-functional version 
> of an enum?
> 
> in short, I would like the compiler to auto promote a literal to a typedef 
> that was based on that literal's type.  Not sure if this is feasible, but 
> without something like this, there is no reason to have a typedef keyword. 
> I can use enum instead.
> 
> -Steve 
> 
> 

You can typedef things other than integral types.

-- 
Kirk McDonald
http://kirkmcdonald.blogspot.com
Pyd: Connecting D and Python
http://pyd.dsource.org



More information about the Digitalmars-d mailing list