argument type const char* can pass string, buf why const wchar* can not pass wstring

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Dec 26 22:50:43 PST 2015


On Sunday, 27 December 2015 at 05:29:44 UTC, riki wrote:
> On Sunday, 27 December 2015 at 04:54:07 UTC, Basile B. wrote:
>> On Sunday, 27 December 2015 at 03:34:18 UTC, riki wrote:
>>> void ccf(const char* str){}
>>> void cwf(const wchar* str){}
>>>
>>> void main()
>>> {
>>>     ccf("aaa");    //ok
>>>     cwf("xxx"w); // error and why ?
>>> }
>>
>> IDK but usually the const storage class is used for narrow 
>> strings because it allows to pass either `char[]` or 
>> `string[]`:
>>
>> ```
>> void ccf(const char[] str){}
>> void cwf(const wchar[] str){}
>>
>> void main()
>> {
>>     ccf("aaa");
>>     cwf("xxx"w);
>>     ccf("aaa".dup);
>>     cwf("xxx"w.dup);
>> }
>> ```
>>
>> I'm actually surprised that one works, maybe both should fail.
>
> windows api is use const(wchar)*, not const wchar[]

To be clear:

My remark was about how it's used in phobos.
In fact your usage is wrong since you should pass either:

"sfsdf".ptr"
"sdfsf"w.ptr

That's also why i said that I was surpsied that the first call 
didn't generate a compilation error. Anyway, it looks like there 
is an implicit convertion in this case...


More information about the Digitalmars-d-learn mailing list