Overload resolution for string

Steven Schveighoffer schveiguy at yahoo.com
Sun Apr 11 20:55:25 PDT 2010


On Sun, 11 Apr 2010 15:33:09 -0400, Ali Çehreli <acehreli at yahoo.com> wrote:

> This is a bug, right? I've been assuming that unqualified string  
> literals were immutable char arrays, but the behavior is different  
> between "hello" vs. "hello"c.
>
> Am I missing something?

"hello" is typed as a string *only* if you are using at a string.  If you  
are using it as a wstring or a dstring, then it is typed that way.  You  
can even use it as a const(char) * and it becomes an ASCII C-style string  
with a zero terminator!

This way, you can do things like this without casts, conversions, or  
suffixes:

dstring ds = "hello";

Unfortunately, this leads to the problem, what version of foo to call when  
supplied with just a literal?  It can call all three!

I don't like the implementation -- give an error -- but it's not an  
unreasonable choice.  I'd file a bug and see what happens, perhaps Walter  
can change it.  I'd recommend assuming the type that occurs when using  
auto.

-Steve


More information about the Digitalmars-d-learn mailing list