// check-pass #![feature(never_type, exhaustive_patterns)] trait Tag { type TagType; } enum Keep {} enum Erase {} impl Tag for Keep { type TagType = (); } impl Tag for Erase { type TagType = !; } enum TagInt { Untagged(i32), Tagged(T::TagType, i32) } fn test(keep: TagInt, erase: TagInt) { match erase { TagInt::Untagged(_) => (), TagInt::Tagged(_, _) => () }; } fn main() {}