Cannot alias null

Tom Browder via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 13 08:04:55 PDT 2014


On Fri, Jun 13, 2014 at 7:59 AM, via Digitalmars-d-learn
<digitalmars-d-learn at puremagic.com> wrote:
> On Thursday, 12 June 2014 at 21:07:47 UTC, Tom Browder via
> Digitalmars-d-learn wrote:
>>
>> What I was really trying to do was D'ify C expressions like this:
>>
>>   typedef ((struct t*)0) blah;
>
>
> This doesn't compile for me with GCC, and I don't know what it's supposed to
> mean. ((struct t*) 0) is a value, not a type...

Sorry, you're correct.  It is from a C macro and would be used for an
rvalue.  Something like this:

$ cat chdr.h
struct t;
#define t_nullptr ((struct t*)0)
struct t* t_ptr = t_nullptr;

After pre-processing with "gcc -E -P" that should read:

$ cat chdr.h.i
struct t;
struct t* t_ptr = ((struct t*)0);

which does compile.

So I'm not sure how to translate that into D.   I do know my first
attempt here doesn't work, even with it being surrounded by extern (C)
{}:

$ cat chdr.d
struct t;
struct t* t_ptr = null;

> Where does it come from?

The usage comes from many of the C API headers in the BRL-CAD package
(http://brlcad.org).

Best,

-Tom


More information about the Digitalmars-d-learn mailing list