concatenation
Steven Schveighoffer
schveiguy at yahoo.com
Tue Jan 25 05:20:26 PST 2011
On Mon, 24 Jan 2011 18:39:39 -0500, Simen kjaeraas
<simen.kjaras at gmail.com> wrote:
> Ellery Newcomer <ellery-newcomer at utulsa.edu> 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[] ?
>
> http://d.puremagic.com/issues/show_bug.cgi?id=1654
I have since felt that the bug report I filed may be more trouble than
it's worth. It makes perfect sense for strings or other arrays of non
references, but it doesn't make sense for more complex types (as can be
seen by the later discussions on that report).
From the original issue, s ~ x is concatenating two different types, what
should the result type be? Either choice is going to cause problems. The
only "correct" choice is a polysemous type that can implicitly cast into
either type on the assumption that the data is unique. This is pretty
much what I wanted from the bug report, but I was very green back then,
didn't know the right way to say it.
If the enhancement can be implemented, I think it would help, but it would
be nice to solve this problem in the general sense (not just for arrays).
There was a suggestion earlier that a strong-pure function could return an
implicitly castable type, but concatenating a mutable and immutable string
would not be such a function. We would need some other way to mark a
function.
-Steve
More information about the Digitalmars-d-learn
mailing list