On Tuesday, 3 September 2013 at 20:07:57 UTC, Walter Bright wrote:
If you need a zero sized object in D,

alias whatever[0] zeroSizeObject;

I tried that, but unfortunately std.variant isn't compatible with zero sized types:

```
import std.variant;
import std.stdio;
import std.typecons;

void main() {

// This would be preferable, but Algebraic doens't like zero sized types
        //alias FirstType  = void[0];
        //alias SecondType = void[0];

// phobos\std\variant.d(165): Error: static assert (0u >= 4u) is false // phobos\std\variant.d(1149): instantiated from here: VariantN!(0u, void[0u], void[0u])

// Typedef!() wraps void[0] in a struct, which still has a size, and therefore
        // memory overhead, so we're back to square one.
        alias FirstType  = Typedef!(void[0]);
        alias SecondType = Typedef!(void[0]);

        pragma(msg, FirstType.sizeof); // 1UL, darn

        alias Variants = Algebraic!(FirstType, SecondType);
}
```

Reply via email to