blob: 0287bb7ad43a8ab8a96588a1cfad819b395dd9b2 [file]
//@ run-pass
// Makes sure we can shadow with type-dependent associated item syntax.
#![feature(min_generic_const_args)]
#![feature(supertrait_item_shadowing)]
#![allow(dead_code)]
use std::mem::size_of;
trait A {
fn hello() -> &'static str {
"A"
}
type Assoc;
const CONST: i32;
}
impl<T> A for T {
type Assoc = i8;
const CONST: i32 = 1;
}
trait B: A {
fn hello() -> &'static str {
"B"
}
type Assoc;
#[rustc_always_gca]
const CONST: i32;
}
impl<T> B for T {
type Assoc = i16;
const CONST: i32 = core::direct_const_arg!(2);
}
fn foo<T>() -> &'static str {
T::hello()
}
fn assoc<T: B>() -> usize {
size_of::<T::Assoc>()
}
fn konst<T: B>() -> i32 {
T::CONST
}
fn main() {
assert_eq!(foo::<()>(), "B");
assert_eq!(assoc::<()>(), 2);
assert_eq!(konst::<()>(), 2);
}