December 31, 2019 Re: When is a dynamic array really a static array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paul Backus | On Tuesday, 31 December 2019 at 13:35:42 UTC, Paul Backus wrote:
> On Tuesday, 31 December 2019 at 11:20:31 UTC, Patrick Schluter wrote:
>> Is it really a bug?
>
> Yes. Perhaps this example will convince you:
>
> void foo(size_t N)(int[N] arr)
> {
> arr[0] = 42;
> }
>
> void foo()(int[] arr)
> {
> arr[0] = 42;
> }
>
> void main()
> {
> int[16] x;
> foo(x[]);
> assert(x[0] == 42); // fails
> }
void foo(size_t N)(int[N] arr) does nothing. I doubt this is a bug too.
|
December 31, 2019 Re: When is a dynamic array really a static array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Temtaime | On 12/31/19 12:24 PM, Temtaime wrote:
> On Tuesday, 31 December 2019 at 13:35:42 UTC, Paul Backus wrote:
>> On Tuesday, 31 December 2019 at 11:20:31 UTC, Patrick Schluter wrote:
>>> Is it really a bug?
>>
>> Yes. Perhaps this example will convince you:
>>
>> void foo(size_t N)(int[N] arr)
>> {
>> arr[0] = 42;
>> }
>>
>> void foo()(int[] arr)
>> {
>> arr[0] = 42;
>> }
>>
>> void main()
>> {
>> int[16] x;
>> foo(x[]);
>> assert(x[0] == 42); // fails
>> }
>
> void foo(size_t N)(int[N] arr) does nothing. I doubt this is a bug too.
int[N] foo(size_t N)(int[N] arr)
{
arr[0] = 42;
return arr;
}
Better?
The use case that spurred this discovery is this:
ubyte[16] hash;
string hexStr = toHexString(hash); // slices a temporary that is immediately removed from scope
The fix should be:
string hexStr = toHexString(hash[]);
But it doesn't do anything different. In order to do it correctly, you have to literally declare another variable, or cast. Hell, I don't even know if the cast will work!
-Steve
|
Copyright © 1999-2021 by the D Language Foundation