Normalize void

Mr.Bingo Bingo at Namo.com
Tue Jul 10 14:14:32 UTC 2018


On Tuesday, 10 July 2018 at 13:28:42 UTC, Yuxuan Shui wrote:
> On Tuesday, 10 July 2018 at 11:37:25 UTC, ag0aep6g wrote:
>> On 07/10/2018 11:56 AM, Yuxuan Shui wrote:
>>> Possible alternatives:
>>> 
>>> * struct Void {}. Takes 1 byte, not as ideal
>>> * alias Void = AliasSeq!(). Doesn't work as template 
>>> argument. i.e.
>>>        SomeTemplate!Void; // actually become SomeTemplate!()
>>
>> What about `void[0]`? It's a proper type. You can declare a 
>> field with it. Size is 0.
>
> Nice!

How does that solve your original problem?


     struct Result(T, E) {
         bool is_err;
         union {
             T result;
             static if (!is(E == void))
                 E error;
         }
     }

I thought you didn't want to have to specialize(meaning the 
static if)?

Doesn't seem like passing void[0] really solves that problem 
since you still might pass void.

I think the real solution is simply to never pass void! Then the 
static if is not needed



     struct Result(T = void[0], E = void[0]) {
         bool is_err;
         union {
             T result;
             E error;
         }
     }








More information about the Digitalmars-d mailing list