Zero-length static array spec
    Iain Buclaw via Digitalmars-d 
    digitalmars-d at puremagic.com
       
    Sat Feb  7 17:16:53 PST 2015
    
    
  
On 8 February 2015 at 00:51, Iain Buclaw <ibuclaw at gdcproject.org> wrote:
> On 7 February 2015 at 22:45, David Nadlinger via Digitalmars-d
> <digitalmars-d at puremagic.com> wrote:
>> On Saturday, 7 February 2015 at 15:04:52 UTC, Iain Buclaw wrote:
>>>
>>> a0.ptr == a1.ptr  // false, enforced by compiler. Comparison not actually
>>> emitted.
>>
>>
>> I don't think that's a viable option. It would lead to completely
>> unintuitive behavior like the following:
>>
>> ---
>> bool isEqual(T)(T a, T b) { return a == b; }
>>
>> int[0] a0;
>> int[1] a1;
>>
>> assert(a0.ptr != a1.ptr);
>> assert(isEqual(a0.ptr, a1.ptr));
>> ---
>>
>
> You should be able to solve this in the compiler.  For instance, can
> you define an array type to having a non-fixed size?
>
> Check if you can do something in terms of:
> ---
> int[1] a1;
> int[0:18446744073709551615] a0;  // size_t.max
> ---
>
Though having a quick skim through the llvm class documentation,
doesn't seem they have a notion of this.  So maybe your best bet is to
delay pushing zero-length arrays?
I will admit it is an odd special case.  And definitely in the land of
WAT if someone uses this in production code.
Iain.
    
    
More information about the Digitalmars-d
mailing list