On 6/20/11 7:23 AM, Steven Schveighoffer wrote:
On Sun, 19 Jun 2011 09:20:17 -0400, Andrei Alexandrescu
<[email protected]> wrote:

On 6/18/11 5:42 PM, Jonathan M Davis wrote:
On 2011-06-18 06:35, Andrei Alexandrescu wrote:
On 6/18/11 4:59 AM, Jonathan M Davis wrote:
I'll look at renaming toUTF16z to toWStringz to match toStringz (as
was
suggested by a couple of people in this thread)

That should be a template toUTFz that takes either char*, wchar*, or
dchar*.

A good point. Are you arguing that toStringz should be replaced by
such a
construct? Or that it should simply exist in addition to toStringz?
Also, we _could_ make it so that such a template would take the
mutabality of
the pointer as well (e.g. toUTF!(char*)(str), toUTF!(const(char)*),
etc.),
which would allow it to be used in cases where you actually want a
mutable
string (which toStringz doesn't do).

- Jonathan M Davis

I think that's a good idea, which would address that StackOverflow
problem too.

The way I'd probably suggest we go about it is as a universal
transcoder. Define std.conv.to with strings of any width and
qualification as input and with pointers to characters of any width as
output. It is implied that the conversion entails adding a terminating
zero.

string a = "hello";
auto p = to!(wchar*)(a); // change width and qualifier

I don't like relying on an implication is a zero character is added. A
char * pointer may or may not be zero terminated (that is one of the
issues with C), so you can't really designate a type to mean "zero
terminated".

Technically you're right. Yet I think it's pretty widespread that a sole char* means a zero-terminated string.


Andrei

Reply via email to