"Type constructors" дают нам удобные вещи для ежедневного программирования.
rdmd --eval='auto f1=Yes.look; auto f2=No.look; f1 && f1.writeln; f2 || f2.writeln'
rdmd --eval='auto aa="aa"; auto bb="bb"; foreach( e; tuple(aa,bb)){ writeln(e.toUpper);}'
Позволяет сконструировать значение, у каторого может быть явное isNull состояние. К примеру, int f0 создаст значение 0. Если использовать Nullable значение будет "неинициализированным".
rdmd --eval='auto f0=Nullable!int.init; auto f1=Nullable!int(123); auto g1=345.nullable; writefln("%s %s %s",f0, f1, g1); if ( !f1.isNull && !g1.isNull) writeln( f1 + g1.get ); //error if try: f0.writeln; '
Nullable.null 123 345
468