Thread overview | |||||
---|---|---|---|---|---|
|
July 12, 2004 char[], wchar[], and dchar[] string literals. | ||||
---|---|---|---|---|
| ||||
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 Re: char[], wchar[], and dchar[] string literals. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Regan Heath | > 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 Re: char[], wchar[], and dchar[] string literals. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jarrett Billingsley | 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/ |
Copyright © 1999-2021 by the D Language Foundation