| //@ 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<T: Tag> { | |
| Untagged(i32), | |
| Tagged(T::TagType, i32) | |
| } | |
| fn test(keep: TagInt<Keep>, erase: TagInt<Erase>) { | |
| match erase { | |
| TagInt::Untagged(_) => (), | |
| TagInt::Tagged(_, _) => () | |
| }; | |
| } | |
| fn main() {} |