D bietet Vererbung für Klassen an, nicht aber für
structs. Zur Erweiterung der Funktionalität von
structs gibt es allerdings ein weiteres großartiges
Mittel: Die Verwendung von Subtypen.
Einer der Member eines structs kann als
alias this definiert werden:
struct SafeInt {
private int theInt;
alias theInt this;
}
Jede Funktion oder Operation an SafeInts,
die nicht vom Typ selbst behandelt werden kann,
wird an den alias this-Member weitergeleitet.
Von außen betrachtet ist SafeInt also ein
normaler Integer.
Dies erlaubt die Erweiterung anderer Typen mit neuer Funktionalität, aber ohne Mehraufwand (engl.: zero overhead) in Bezug auf Speicher oder Laufzeit.