Thread overview
Appending immutable char implicit cast to int, bug or feature?
Dec 05, 2012
ixid
Dec 06, 2012
Ali Çehreli
Dec 06, 2012
ixid
December 05, 2012
This is simple code to create all genetic combinations from two organisms.

string[] mixGenes(string a, string b) {
	string[] result;

	foreach(i;0..2)
		foreach(j;0..2)
			foreach(k;2..4)
				foreach(m;2..4)
					result ~= [a[i]] ~ [b[j]] ~ [a[k]] ~ [b[m]];

	return result;
}

This works, however when I remove the brackets:

result ~= a[i] ~ b[j] ~ a[k] ~ b[m];

I get the error:

Error: incompatible types for ((cast(int)a[cast(uint)i]) ~ (cast(int)b[cast(uint)j])): 'int' and 'int'

Why, when trying to append immutable chars to make a string, has it decided to implicitly cast them to int?
December 06, 2012
On 12/05/2012 09:30 AM, ixid wrote:
> This is simple code to create all genetic combinations from two organisms.
>
> string[] mixGenes(string a, string b) {
> string[] result;
>
> foreach(i;0..2)
> foreach(j;0..2)
> foreach(k;2..4)
> foreach(m;2..4)
> result ~= [a[i]] ~ [b[j]] ~ [a[k]] ~ [b[m]];
>
> return result;
> }
>
> This works, however when I remove the brackets:
>
> result ~= a[i] ~ b[j] ~ a[k] ~ b[m];
>
> I get the error:
>
> Error: incompatible types for ((cast(int)a[cast(uint)i]) ~
> (cast(int)b[cast(uint)j])): 'int' and 'int'
>
> Why, when trying to append immutable chars to make a string, has it
> decided to implicitly cast them to int?

I don't know where that cast occurs but I wanted to state the obvious: Operator ~ is defined only for arrays.

Ali
December 06, 2012
> I don't know where that cast occurs but I wanted to state the obvious: Operator ~ is defined only for arrays.

Would having it also work for individual units to make an array be a plausible enhancement request? It would seem like a natural use of the operator.