Cannot implicitly convert expression of type const(string[]) to string[]
tsbockman
thomas.bockman at gmail.com
Sat Jan 9 04:14:39 UTC 2021
On Saturday, 9 January 2021 at 02:07:50 UTC, Ali Çehreli wrote:
> The destination is immutable(char)[].
No, it's not. string[] means immutable(char)[][] - note the
second set of brackets.
> Even though the source is 'const ref', other.text is a copy of
> the slice object (the pointer and the length). Because the
> elements are immutable, other.text cannot mutate value.text.
The elements are not immutable. Each element is an mutable slice
of immutable characters.
> > Your code has a logical inconsistency
>
> I don't see where. I think this is one of those too strict
> cases of D where I unhappily slap a cast and move on.
The cast you propose breaks the type system. For example:
module app;
import std.stdio;
struct Value
{
int value;
string data;
string[] text;
}
void test(const ref Value value) @trusted // Don't do this!
{
Value other = void;
other.text = cast(string[]) value.text; // This cast is
@system for good reason.
other.text[0] = "Oops";
}
void main() @safe
{
immutable(Value) row = {
value: 10,
data: "ttttggg",
text: [ "Don't change me, bro!" ]
};
writeln(row.text);
test(row);
writeln(row.text);
}
More information about the Digitalmars-d-learn
mailing list