Have you considered making these work, instead of throwing an exception? import std.typecons; alias T = Nullable!(int, -1); void main() { T a; T b; assert(a == b); T c; T d = 42; assert(c != d); } It could be a template parameter for Nullable, and the default be to preserve the current behavior.