| //@ run-pass | |
| #![allow(dead_code, enum_intrinsics_non_enums)] | |
| #![feature(variant_count)] | |
| #![feature(never_type)] | |
| use std::mem::variant_count; | |
| enum Void {} | |
| enum Foo { | |
| A, | |
| B, | |
| C, | |
| } | |
| enum Bar { | |
| A, | |
| B, | |
| C, | |
| D(usize), | |
| E { field_1: usize, field_2: Foo }, | |
| } | |
| struct Baz { | |
| a: u32, | |
| b: *const u8, | |
| } | |
| const TEST_VOID: usize = variant_count::<Void>(); | |
| const TEST_FOO: usize = variant_count::<Foo>(); | |
| const TEST_BAR: usize = variant_count::<Bar>(); | |
| const NO_ICE_STRUCT: usize = variant_count::<Baz>(); | |
| const NO_ICE_BOOL: usize = variant_count::<bool>(); | |
| const NO_ICE_PRIM: usize = variant_count::<*const u8>(); | |
| fn main() { | |
| assert_eq!(TEST_VOID, 0); | |
| assert_eq!(TEST_FOO, 3); | |
| assert_eq!(TEST_BAR, 5); | |
| assert_eq!(variant_count::<Void>(), 0); | |
| assert_eq!(variant_count::<Foo>(), 3); | |
| assert_eq!(variant_count::<Bar>(), 5); | |
| assert_eq!(variant_count::<Option<char>>(), 2); | |
| assert_eq!(variant_count::<Option<!>>(), 2); | |
| assert_eq!(variant_count::<Result<!, !>>(), 2); | |
| } |