@lscrd: The `initElement` is also a setter despite its name ;). You cannot stop users from calling `element.initElement("different id")` and mutating the field at any point in time, which is what I'm trying to avoid.
In fact that is also true for my template constructor idea via `newElement("different id", existingElement)`. If anything the template makes it a bit less obvious. Maybe what I really need is a macro taking a typedesc/generic and a list of constructor args that are forwarded to the subtype construction. Then the macro can really only be used for constructing new elements with injected `id` modifications.