2024-02-16 20:02:50 +00:00
|
|
|
//@ check-pass
|
2024-06-30 17:08:45 +00:00
|
|
|
//@ compile-flags: -Znext-solver
|
2023-07-10 03:10:03 +02:00
|
|
|
// Test that we can call methods from const trait impls inside of generic const items.
|
|
|
|
|
2024-10-30 18:03:44 +00:00
|
|
|
#![feature(generic_const_items, const_trait_impl)]
|
2023-07-10 03:10:03 +02:00
|
|
|
#![allow(incomplete_features)]
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
|
2023-12-18 17:55:55 +01:00
|
|
|
const CREATE<T: const Create>: T = T::create();
|
2023-07-10 03:10:03 +02:00
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
}
|
2023-12-18 17:55:55 +01:00
|
|
|
|
|
|
|
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>;
|