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