I missed this, but if you declare it void, you may run into problems: Since you are manipulating a static array, then the constructor, which does `data[i] = value;` will do an *assignement*, This may fail if said assignement is elaborate (think `RefCounted`). If you do this, then the constructor needs to have an `emplace` instead of an `opAssign`

You *might* actually get away with it if instead you store a `RepeatType`: In this case, the `Repeat` will have several different individual fields, and `data[i] = value;` will instead trigger a postblit copy (I *think*: requries double checking).

A further advantage of storing a `RepeatType` is that (in theory), it can work with const fields, whereas with a static array, it doesn't work so good (I think). Also, as a general rule, the compiler tends to generate better code with Tuples: when it manipulates static arrays, it relies on druntime's runtime code, which is inferior to what the compiler can do nativelly anyways...

That said, in both cases, you'll still run into problems if someone initializes an empty `Repeat` using `typeof`. I'd recomment disabling `this();`, but last time I checked, disabled this types have a tendency to break phobos code.