Shouldn't c_long and c_ulong be library typedefs?

Jonathan M Davis jmdavisProg at gmx.com
Wed Sep 5 17:14:21 PDT 2012


On Thursday, September 06, 2012 01:52:01 Andrej Mitrovic wrote:
> Anyway I've two questions:
> 1) Has anyone come up with a library solution for a typedef because I
> need it for cases like these, and
> 2) Will c_long/c_ulong be converted to a library typedef or will they
> remain aliases?

Considering that the only reason to use c_long and its ilk is because you have 
an extern(C) function, I wouldn't expect Typedef to have anything to do with 
it, because that would be D struct. I'd always expect them to be aliases. If 
you really have two functions which conflict because the same size integer, 
then you really have two functions which conflict. I'm fairly sure that the C 
linker is going to see any difference between int and long either if long is 
the same size as int (though I could be wrong).

So, if you're trying to overload based on integral types which can change size 
depending on the architecture, I'd advise that you use static if so that only 
one of them is defined when they're the same. You shouldn't have both of them 
if the integral types are actually the same size, because then you have two 
functions with the exact same signature, regardless of what the actual names 
of the types are.

- Jonathan M Davis


More information about the Digitalmars-d mailing list