I’ll point out that using ascription patterns is incompatible with how ascription patterns are used today. It is not clear that x: T
asserts that x
is a T
or that x
is the variant of type T
. Moreover, the following code’s behavior has been left undefined:
fn foo<T, U>(x: enum(T, U)) {
match x {
t: T => panic!("T"),
u: U => panic!("U"),
}
}
foo::<i32, i32>(x)
The only solution to this problem is to somehow ban that monomorphization or to ban generic anonymous sums (or, to introduce where T != U
clauses, which is overkill).