thanks, i tried 2 variants:
```d
struct Tnew {TBase payload; alias payload this;}
```
```d
enum Tnew : Tbase {init = Tbase.init}
```

both works, but 1-st not allow "2 level" cast:
```d
struct Xptr {void* payload; alias payload this;} //Xptr based on void* struct Xobj {Xptr payload; alias payload this;} //Xobj based on Xptr
Xptr xptr = cast(Xptr) null;             //OK
Xobj xobj = cast(Xobj) null;             //ERROR
Xobj xobj = cast(Xobj) cast(Xptr) null; //OK, needs both levels explitity
```
```d
enum Xptr : void* {init = (void*).init} //Xptr based on void*
enum Xobj : Xptr {init = Xptr.init}     //Xobj based on  Xptr
Xptr xptr = cast(Xptr) null;            //OK
Xobj xobj = cast(Xobj) null;            //OK
```

so "enum" variant is better for me, thanks!

Reply via email to