On 11/01/2011 01:38 AM, bearophile wrote:
Timon Gehr:
extern(C) void foo(char* str);
foo(cast(char*)"hello");

cast(char*) is D code, it's not a legacy C idiom, so you are writing it now in 
the D programs. Five years from now do you prefer D programmers to write:

extern(C) void puts(const char* str);
void main() {
     puts(cast(char*)"hello");
}


That works without the cast.

Or:

extern(C) void puts(const char* str);
void main() {
     puts("hello".ptr);
}

That works without the ".ptr".


?
Casts are unsafe and using the ptr is even shorter to write. I don't seen the 
need of that opCast.


I was casting to char*, not const(char*). It is just that occasionally C headers/bindings lack the const qualifier. Then passing a string literal is achieved simplest by a cast to char*. I don't think we really need that feature, I just think that removing it breaks existing code without a reason.

extern(C) void puts(char* str);
void main() {
     puts(cast(char*)"hello");
}

Reply via email to