Cannot implicitly convert expression of type const(string[]) to string[]

Ali Çehreli acehreli at yahoo.com
Sat Jan 9 02:07:50 UTC 2021


On 1/8/21 3:10 PM, tsbockman wrote:

 > On Friday, 8 January 2021 at 20:43:37 UTC, Andrey wrote:
 >> Hello,
 >>
 >>> struct Value
 >>> {
 >>>     int value;
 >>>     string data;
 >>>     string[] text;

The destination is immutable(char)[]. The characters cannot be changed. 
We can still append but other slices that share the same data is 
protected by D's no-stomp decision.

 >>> }
 >>>
 >>> void test(const ref Value value)
 >>> {
 >>>     Value other = void;
 >>>     other.text = value.text;

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.

 >>> }
 >>>
 >>> void main()
 >>> {
 >>>     Value row;
 >>>     row.value = 10;
 >>>     row.data = "ttttggg";
 >>>
 >>>     test(row);
 >>> }

 > 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.

Ali



More information about the Digitalmars-d-learn mailing list