std.string.assumeUTF() silently casting mutable to immutable?

Forest forest at example.com
Tue Feb 13 07:40:57 UTC 2024


I may have found a bug in assumeUTF(), but being new to D, I'm 
not sure.

The description:

> Assume the given array of integers arr is a well-formed UTF 
> string and return it typed as a UTF string.
> ubyte becomes char, ushort becomes wchar and uint becomes 
> dchar. Type qualifiers are preserved.

The declaration:

```d
auto assumeUTF(T)(T[] arr)
if (staticIndexOf!(immutable T, immutable ubyte, immutable 
ushort, immutable uint) != -1)
```

Shouldn't that precondition's `immutable T` be simply `T`?

As it stands, I can do this with no complaints from the 
compiler...

```d
string test(ubyte[] arr)
{
     import std.string;
     return arr.assumeUTF;
}

```

...and accidentally end up with a "string" pointing at mutable 
data.

Am I missing something?


More information about the Digitalmars-d-learn mailing list