| //@ check-pass |
| //@ compile-flags: -Znext-solver |
| // Test that we can call methods from const trait impls inside of generic const items. |
| |
| #![feature(generic_const_items, const_trait_impl, effects)] |
| #![allow(incomplete_features)] |
| #![crate_type = "lib"] |
| |
| const CREATE<T: const Create>: T = T::create(); |
| |
| pub const K0: i32 = CREATE::<i32>; |
| pub const K1: i32 = CREATE; // arg inferred |
| |
| #[const_trait] |
| trait Create { |
| fn create() -> Self; |
| } |
| |
| impl const Create for i32 { |
| fn create() -> i32 { |
| 4096 |
| } |
| } |
| |
| trait Mod { // doesn't need to be a `#[const_trait]` |
| const CREATE<T: const Create>: T; |
| } |
| |
| impl Mod for () { |
| const CREATE<T: const Create>: T = T::create(); |
| } |
| |
| pub const K2: i32 = <() as Mod>::CREATE::<i32>; |