Andrei Alexandrescu wrote: > void push(T value); > in { > auto oldLength = length(); > } > out { > assert(value == top()); > assert(length == oldLength + 1); > } Another keyword abuse: void push(T value); in { auto in.oldLength = length(); } out { assert(value == top()); assert(length == in.oldLength + 1); }