| // revisions: min_const_fn const_fn |
| // run-pass |
| |
| #![cfg_attr(const_fn, feature(const_fn))] |
| |
| trait ConstDefault { |
| const DEFAULT: Self; |
| } |
| |
| #[derive(PartialEq)] |
| enum E { |
| V(i32), |
| W(usize), |
| } |
| |
| impl ConstDefault for E { |
| const DEFAULT: Self = Self::V(23); |
| } |
| |
| impl ConstDefault for Option<i32> { |
| const DEFAULT: Self = Self::Some(23); |
| } |
| |
| impl E { |
| const NON_DEFAULT: Self = Self::W(12); |
| const fn local_fn() -> Self { |
| Self::V(23) |
| } |
| } |
| |
| const fn explicit_qpath() -> E { |
| let _x = <Option<usize>>::Some(23); |
| <E>::W(12) |
| } |
| |
| fn main() { |
| assert!(E::DEFAULT == E::local_fn()); |
| assert!(Option::DEFAULT == Some(23)); |
| assert!(E::NON_DEFAULT == explicit_qpath()); |
| } |