| #![feature(const_trait_impl)] |
| |
| #[const_trait] |
| trait Trait {} |
| |
| // Regression test for issue #90052. |
| fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed |
| |
| struct Struct<T: ~const Trait> { field: T } //~ ERROR `~const` is not allowed here |
| struct TupleStruct<T: ~const Trait>(T); //~ ERROR `~const` is not allowed here |
| struct UnitStruct<T: ~const Trait>; //~ ERROR `~const` is not allowed here |
| //~^ ERROR parameter `T` is never used |
| |
| enum Enum<T: ~const Trait> { Variant(T) } //~ ERROR `~const` is not allowed here |
| |
| union Union<T: ~const Trait> { field: T } //~ ERROR `~const` is not allowed here |
| //~^ ERROR field must implement `Copy` |
| |
| type Type<T: ~const Trait> = T; //~ ERROR `~const` is not allowed here |
| |
| const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed here |
| //~^ ERROR generic const items are experimental |
| |
| trait NonConstTrait { |
| type Type<T: ~const Trait>: ~const Trait; |
| //~^ ERROR `~const` is not allowed |
| //~| ERROR `~const` is not allowed |
| fn non_const_function<T: ~const Trait>(); //~ ERROR `~const` is not allowed |
| const CONSTANT<T: ~const Trait>: (); //~ ERROR `~const` is not allowed |
| //~^ ERROR generic const items are experimental |
| } |
| |
| impl NonConstTrait for () { |
| type Type<T: ~const Trait> = (); //~ ERROR `~const` is not allowed |
| //~^ ERROR overflow evaluating the requirement `(): Trait` |
| fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed |
| const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed |
| //~^ ERROR generic const items are experimental |
| } |
| |
| struct Implementor; |
| |
| impl Implementor { |
| type Type<T: ~const Trait> = (); //~ ERROR `~const` is not allowed |
| //~^ ERROR inherent associated types are unstable |
| fn non_const_function<T: ~const Trait>() {} //~ ERROR `~const` is not allowed |
| const CONSTANT<T: ~const Trait>: () = (); //~ ERROR `~const` is not allowed |
| //~^ ERROR generic const items are experimental |
| } |
| |
| // non-const traits |
| trait Child0: ~const Trait {} //~ ERROR `~const` is not allowed |
| trait Child1 where Self: ~const Trait {} //~ ERROR `~const` is not allowed |
| |
| // non-const impl |
| impl<T: ~const Trait> Trait for T {} //~ ERROR `~const` is not allowed |
| |
| // inherent impl (regression test for issue #117004) |
| impl<T: ~const Trait> Struct<T> {} //~ ERROR `~const` is not allowed |
| |
| fn main() {} |