| #![feature(no_core, intrinsics, staged_api, lang_items)] | |
| #![no_core] | |
| #[lang = "sized"] | |
| pub trait Sized {} | |
| pub trait Number: NumConv { | |
| fn from<T: Number>(n: T) -> Self; | |
| } | |
| trait NumberExt: Number { | |
| fn to_double(&self) -> f64 { | |
| self.to_float() * 2.0 | |
| } | |
| } | |
| impl<T: Number> NumberExt for T {} | |
| impl Number for f64 { | |
| fn from<T: Number + NewTrait>(n: T) -> f64 { // { dg-error {bounds not satisfied for f64 .NewTrait. is not satisfied \[E0277\]} } | |
| n.to_float() | |
| } | |
| } | |
| pub trait NumConv { | |
| fn to_float(&self) -> f64; | |
| } | |
| impl NumConv for f64 { | |
| fn to_float(&self) -> f64 { | |
| *self | |
| } | |
| } | |
| pub fn main() { | |
| let _: f64 = Number::from(0.0f64); | |
| } | |
| trait NewTrait { | |
| type Assoc; | |
| } |