| //@ 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); |
| } |