Cannot alias null

Philpax via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jun 13 08:12:09 PDT 2014


On Friday, 13 June 2014 at 15:05:49 UTC, Tom Browder via 
Digitalmars-d-learn wrote:
> 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

Remove the struct from the pointer:

struct t;
t* t_ptr = null;


More information about the Digitalmars-d-learn mailing list