Limited type matching?
Namespace
rswhite4 at googlemail.com
Tue Sep 10 06:15:47 PDT 2013
On Tuesday, 10 September 2013 at 10:53:15 UTC, Kenji Hara wrote:
> 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
Nice to hear. I already filled a bug report:
http://d.puremagic.com/issues/show_bug.cgi?id=10999
More information about the Digitalmars-d-learn
mailing list