digitalmars.D - String implicit casts
- lightoze (10/10) Mar 09 2006 I use this two functions:
- Sean Kelly (7/23) Mar 09 2006 It's normal, and is a result of the overloading rules in D. To resolve
- Derek Parnell (16/32) Mar 09 2006 It is 'normal' but not expected. Most people assume that an unadorned
I use this two functions:
void x(char[] x) {}
void x(wchar[] x) {}
This works:
x(cast(char[])"x");
x(cast(wchar[])"x");
This do not:
x("x");
I have found nothing about it in manual, can anyone tell me if it is normal or
not?
Mar 09 2006
lightoze wrote:
I use this two functions:
void x(char[] x) {}
void x(wchar[] x) {}
This works:
x(cast(char[])"x");
x(cast(wchar[])"x");
This do not:
x("x");
I have found nothing about it in manual, can anyone tell me if it is normal or
not?
It's normal, and is a result of the overloading rules in D. To resolve
an overload with string literals, try this:
x( "x"c ); // declare "x" as a char string
Templates can help as well, as in many cases you don't really need
separate overloads for each char type.
Sean
Mar 09 2006
On Thu, 9 Mar 2006 22:56:04 +0000 (UTC), lightoze wrote:
I use this two functions:
void x(char[] x) {}
void x(wchar[] x) {}
This works:
x(cast(char[])"x");
x(cast(wchar[])"x");
This do not:
x("x");
I have found nothing about it in manual, can anyone tell me if it is normal or
not?
It is 'normal' but not expected. Most people assume that an unadorned
string literal is a char[] but it turns out that the compiler is a little
more discerning. But in general, if the compiler cannot decide which utf
character type to encode the literal with, it complains and you have to
tell it what to do. Fortunately, we can add a suffix to the literal to tell
the compiler what we want instead of the chunky cast syntax. In your case
...
x( "x"c );
x( "x"w );
--
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Down with mediocracy!"
10/03/2006 10:15:09 AM
Mar 09 2006









Sean Kelly <sean f4.ca> 