digitalmars.D.learn - argument type const char* can pass string, buf why const wchar* can
- riki (7/7) Dec 26 2015 void ccf(const char* str){}
- Alex Parrill (3/10) Dec 26 2015 Unrelated to your error, but those functions should probably take
- riki (3/14) Dec 26 2015 xx.d(7): Error: function xx.cwf (const(wchar*) str) is not
- Basile B. (15/22) Dec 26 2015 IDK but usually the const storage class is used for narrow
- Basile B. (3/4) Dec 26 2015 I meant "char[]` or `string", string without square brackets of
- riki (2/25) Dec 26 2015 windows api is use const(wchar)*, not const wchar[]
- Basile B. (9/39) Dec 26 2015 To be clear:
- Jimmy Cao (9/16) Dec 26 2015 You need to remove the w suffix. Otherwise it is forcibly typed
void ccf(const char* str){} void cwf(const wchar* str){} void main() { ccf("aaa"); //ok cwf("xxx"w); // error and why ? }
Dec 26 2015
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 ? }Unrelated to your error, but those functions should probably take a `string` and `wstring` respectively instead.
Dec 26 2015
On Sunday, 27 December 2015 at 03:40:50 UTC, Alex Parrill wrote:On Sunday, 27 December 2015 at 03:34:18 UTC, riki wrote:xx.d(7): Error: function xx.cwf (const(wchar*) str) is not callable using argument types (wstring)void ccf(const char* str){} void cwf(const wchar* str){} void main() { ccf("aaa"); //ok cwf("xxx"w); // error and why ? }Unrelated to your error, but those functions should probably take a `string` and `wstring` respectively instead.
Dec 26 2015
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.
Dec 26 2015
On Sunday, 27 December 2015 at 04:54:07 UTC, Basile B. wrote:it allows to pass either `char[]` or `string[]`:I meant "char[]` or `string", string without square brackets of course...
Dec 26 2015
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:windows api is use const(wchar)*, not const wchar[]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.
Dec 26 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: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...On Sunday, 27 December 2015 at 03:34:18 UTC, riki wrote:windows api is use const(wchar)*, not const wchar[]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.
Dec 26 2015
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 ? }You need to remove the w suffix. Otherwise it is forcibly typed as a dynamic array and is no longer implicitly convertible. void cwf(const wchar* str){} void main() { ccf("aaa"); //ok cwf("xxx"); // a string literal }
Dec 26 2015