Thread overview
char[], wchar[], and dchar[] string literals.
Jul 12, 2004
Regan Heath
Jul 12, 2004
Regan Heath
July 12, 2004
http://www.digitalmars.com/d/arrays.html mentions..

<quote>
The type of a string is determined by the semantic phase of compilation. The type is one of: char[], wchar[], dchar[], and is determined by implicit conversion rules. If there are two equally applicable implicit conversions, the result is an error. To disambiguate these cases, a cast is appropriate:

(wchar [])"abc"// this is an array of wchar characters

String literals are implicitly converted between chars, wchars, and dchars as necessary.
</quote>

The cast above is old style and needs updating, I went looking for the Wiki for this and could not find it?

Anyway..

This code:
dchar[] foo(dchar[] name)
{
  dchar[] testString = "<" ~ name ~ ">";
  return testString;
}

fails with the error:
  incompatible types for (("<") ~ (name)): 'char[]' and 'dchar[]'

Yet this code:
dchar[] foo(dchar[] name)
{
  dchar[] testString = "<";
  testString ~= name;
  testString ~= ">";
  return testString;
}

compiles/works fine.

Regan

-- 
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
July 12, 2004
> The cast above is old style and needs updating

which you write as cast(wchar[])string;.

> dchar[] foo(dchar[] name)
> {
>    dchar[] testString = "<" ~ name ~ ">";
>    return testString;
> }

for some reason, the compiler is not smart enough to know that those string literals are dchar.  so you must tell it:

dchar[] foo(dchar[] name)
{
   dchar[] testString = cast(dchar[])"<" ~ name ~ cast(dchar[])">";
   return testString;
}

compiles and works correctly.

what is everyone's preoccupation with UTF anyway?  why can't we all get along and use ASCII ;)


July 12, 2004
On Mon, 12 Jul 2004 11:01:50 -0400, Jarrett Billingsley <kb3ctd2@yahoo.com> wrote:
>> The cast above is old style and needs updating
>
> which you write as cast(wchar[])string;.

Yep. :)

>> dchar[] foo(dchar[] name)
>> {
>>    dchar[] testString = "<" ~ name ~ ">";
>>    return testString;
>> }
>
> for some reason, the compiler is not smart enough to know that those string
> literals are dchar.  so you must tell it:

I know. I believe the documentation implies that it should be smart enough to tell, so I think it is a bug.

> dchar[] foo(dchar[] name)
> {
>    dchar[] testString = cast(dchar[])"<" ~ name ~ cast(dchar[])">";
>    return testString;
> }
>
> compiles and works correctly.

Thanks for this. I worked it out myself. I was just posting the bug as I see it.

> what is everyone's preoccupation with UTF anyway?  why can't we all get
> along and use ASCII ;)

:) yeah.. I only *found* this cos a friend of mine was trying D by writing an XML library, which according to the spec must support the various flavours of UTF.

Regan

-- 
Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/