Thread overview
can I alias something to void?
Jan 17, 2007
torhu
Jan 17, 2007
torhu
Jan 17, 2007
Mike Parker
Jan 17, 2007
Stewart Gordon
January 17, 2007
I'm translating some C headers.


#define AL_CONST const

void set_window_title(AL_CONST char *name) { /* ... */ }


I'm wondering if there is a legitimate way to turn AL_CONST into nothing in D.  This compiles:

alias void AL_CONST;

void set_window_title(AL_CONST char *name) { /* ... */ }


But I have no idea if that screws up the parameter type somehow, or if it's legal according to the D spec.

Of course I could delete the AL_CONST's.  But I'm just curious.
January 17, 2007
torhu wrote:
> I'm translating some C headers.
> 
> 
> #define AL_CONST const
> 
> void set_window_title(AL_CONST char *name) { /* ... */ }
> 
> 
> I'm wondering if there is a legitimate way to turn AL_CONST into nothing in D.  This compiles:
> 
> alias void AL_CONST;
> 
> void set_window_title(AL_CONST char *name) { /* ... */ }
> 

Eh...seems the compiler doesn't accept 'AL_CONST char *' after all. Sorry about that.

I'm still interested in other ways of doing this, though.
January 17, 2007
torhu wrote:
> torhu wrote:
>> I'm translating some C headers.
>>
>>
>> #define AL_CONST const
>>
>> void set_window_title(AL_CONST char *name) { /* ... */ }
>>
>>
>> I'm wondering if there is a legitimate way to turn AL_CONST into nothing in D.  This compiles:
>>
>> alias void AL_CONST;
>>
>> void set_window_title(AL_CONST char *name) { /* ... */ }
>>
> 
> Eh...seems the compiler doesn't accept 'AL_CONST char *' after all. Sorry about that.
> 
> I'm still interested in other ways of doing this, though.

You don't need it. Just drop the 'const' altogether:

void set_window_title(char* name) { }

Of course, if this is a pure D port of a C program, you'd be better served with this form:

void set_window_title(char[] name) {}

And if it is a binding to a C library, this form:

extern(C) void set_window_title(char* name);
January 17, 2007
torhu wrote:
> I'm translating some C headers.
> 
> #define AL_CONST const
> 
> void set_window_title(AL_CONST char *name) { /* ... */ }
> 
> I'm wondering if there is a legitimate way to turn AL_CONST into nothing in D.  This compiles:

Not as such, because D by design has a context-free grammar.  Defining an identifier to resolve to textual nothingness would affect the parsing.

> alias void AL_CONST;
> 
> void set_window_title(AL_CONST char *name) { /* ... */ }
<snip>

Another tip: In D pointer declarations, the '*' is strictly associated with the type.  So

    char* name

is a preferred style to

    char *name

Stewart.