// Tests that a non-const default impl can be specialized by a const trait impl, // but that the default impl cannot be used in a const context. // run-pass #![feature(const_trait_impl)] #![feature(min_specialization)] #[const_trait] trait Value { fn value() -> u32; } const fn get_value() -> u32 { T::value() } impl Value for T { default fn value() -> u32 { println!("You can't do that (constly)"); 0 } } struct FortyTwo; impl const Value for FortyTwo { fn value() -> u32 { 42 } } fn main() { let zero = get_value::<()>(); assert_eq!(zero, 0); const FORTY_TWO: u32 = get_value::(); assert_eq!(FORTY_TWO, 42); }