On 01/24/2011 05:22 PM, Robert Clipsham wrote:
On 24/01/11 23:09, Ellery Newcomer wrote:
in the following:
void main(){
char[] x;
string s;
string y;
y = s ~ x;
}
tok.d(5): Error: cannot implicitly convert expression
(cast(const(char)[])s ~ x) of type char[] to string
why should typeof(s ~ x) == char[] ?
x is a mutable array of mutable chars
s is a mutable array of immutable chars
If you append something mutable to something immutable, the resulting
type must be mutable, as some of the contents is mutable and could be
changed - if that can happen the result can't be immutable. To get
around this there's .idup I believe.
If you append something mutable to something immutable, the resulting
type can't be mutable, as some of the contents are immutable and may not
be changed - if you let the result type be mutable you've frivolously
done away with the type system's protection of the immutable elements.
const(char) makes more sense to me from that front.
char is a value type and x is always going to get copied, so mutability
isn't really an issue in this case.
number of copy operations might be, though.
y = s ~ x.idup;
is
COPY(s, COPY(x))
as I understand things. Be nice if dmd could flatten the copying.