cast(string) for mutable array
H. S. Teoh
hsteoh at qfbox.info
Fri Jul 31 16:07:01 UTC 2026
On Fri, Jul 31, 2026 at 08:10:39AM -0700, H. S. Teoh via Digitalmars-d-learn wrote:
> > On Friday, 31 July 2026 at 13:52:12 UTC, Vindex9 wrote:
> > > Is this code normal? Why can't it be marked with `@safe`? Can only
> > > `idup` be used for `@safe` in such cases?
> > >
> > > ```d
> > > string fn() @trusted pure {
> > > char[] arr;
> > > // some manipulations...
> > > return cast(string) arr;
> > > }
> > > ```
> > >
> > > Where is the line between cases where the `@trusted` tag can be
> > > used and cases where the `@system` tag can be used?
> [...]
>
> If the function is pure, you should be able to just return char[] and
> the caller will be able to assign it to string. No need for a cast.
> Just specify the return type as `char[]`.
[...]
Proof of concept:
```
import std;
char[] pureStringFunc() pure @safe { // N.B. returns mutable char[]
char[] arr;
arr ~= "abc";
foreach (i; 0 .. 5) {
arr ~= i.to!(char[]);
}
return arr;
}
void main() @safe {
string s = pureStringFunc(); // N.B. assigns to (immutable) string
writeln(s);
}
```
Output:
```
abc01234
```
T
--
How many guacas are in 1 guacamole? 6.022*10^23, also known as Avocado's Number.
More information about the Digitalmars-d-learn
mailing list