Limited type matching?
Kenji Hara
k.hara.pg at gmail.com
Tue Sep 10 03:53:13 PDT 2013
On Tuesday, 10 September 2013 at 08:04:48 UTC, Namespace wrote:
>> Currently, all of array types does not allow copy-conversion
>> like ushort to short for their elements.
>>
>> In old D1 age, static array did not have value semantics, so
>> the behavior was expected.
>> In D2, static array had changed to value type, but the
>> behavior was not changed.
>>
>> As far as I know, there was no discussion about that, but at
>> least it is not fundamentally wrong.
>>
>> Kenji Hara
>
> And what is your personal opinion?
> I think an implicit cast between signed / unsigned would be
> acceptable even with static arrays. It were only logical.
Hmm, OK. I've taken a look a little deeper about the current
behavior.
void main()
{
void f1(short) {}
void f2(short[2]) {}
void f3(short[]) {}
ushort us = 1;
short ss = us; // OK
ss = us; // OK
f1(us); // OK
ushort[2] usa = [1,2];
short[2] ssa = usa; // OK -> [x]
ssa = usa; // NG -> [y]
f2(usa); // NG -> [y]
ushort[] uda = [1,2];
short[] sda = uda; // NG, expected
sda = uda; // NG, expected
f3(uda); // NG, expected
}
Surely the current state that, [x] is accepted but [y] is
rejected, looks weird to me. It would be a bug.
Kenji Hara
More information about the Digitalmars-d-learn
mailing list