conditions ---------- Should conditions be bound to types, or have a certain scope? type conditions: int cond(value > 0) i = 1; (float) sqrt(float cond(value >= 0)); () clear(list(T) postcond(value.length == 0)); typedef a = ( int cond(value > 0) x; int y; ); typedef a = ( int x; int y; ) cond(x > y); () create_list(count size, count capacity) cond(size <= capacity); statement conditions (more/less flexible? more/less readable?): int i = 1 cond(value > 0); typedef a = ( int x; int y; ) cond(x > y); () create_list(count size, count capacity) cond(size <= capacity); It's possible to use a value where a constrained type is expected in the following cases (assuming the type is compatible, apart from it's conditions): 1) The target type has no conditions. 2) The target type has a weaker (or equally strict) condition as the combined condition of the following: a) the source type b) the scope c) other things that can the compiler can compute easily?