| #![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() {} |