Library Typedefs are fundamentally broken

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Tue Sep 23 15:58:23 PDT 2014


On 09/23/2014 06:01 PM, Andrei Alexandrescu wrote:
>>
>> alias HMENU = Typedef!(void*, __MODULE__ ~ ".HMENU");
>> alias HFONT = Typedef!(void*, __MODULE__ ~ ".HMENU"); // oops
>
> mixin(makeTypedef!("HMENU", void*));
> mixin(makeTypedef!("HFONT", void*));
>
> I said and I repeat: I do agree it's less convenient than a baked-in
> facility. Even with the proper default arguments and all. ...


But at that point, why not mix in an entire struct declaration?
We even get better error messages out of this:

module a.b.c;
mixin MakeTypedef!("HMENU",void*));
mixin(makeTypedef!("HFONT",void*));

void main(){
     HMENU hm;
     HFONT hf;
     hf=hm;
}

The error message will mention types 'HMENU' and 
'Typedef!(void*,"a.b.c.HFONT")'.

Furthermore, types will be distinct because the module system 
understands that they are distinct declarations.


More information about the Digitalmars-d mailing list