From a480ab6839ff88a770ca87faf4a4cadcb001bcbe Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Sep 2022 06:02:49 +0000 Subject: Allow specializing on const trait bounds --- src/test/ui/specialization/const_trait_impl.rs | 55 ++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/test/ui/specialization/const_trait_impl.rs (limited to 'src/test') diff --git a/src/test/ui/specialization/const_trait_impl.rs b/src/test/ui/specialization/const_trait_impl.rs new file mode 100644 index 00000000000..05ba4c8d45d --- /dev/null +++ b/src/test/ui/specialization/const_trait_impl.rs @@ -0,0 +1,55 @@ +// check-pass +#![feature(const_trait_impl, min_specialization, rustc_attrs)] + +#[rustc_specialization_trait] +#[const_trait] +pub unsafe trait Sup { + fn foo() -> u32; +} + +#[rustc_specialization_trait] +#[const_trait] +pub unsafe trait Sub: ~const Sup {} + +unsafe impl const Sup for u8 { + default fn foo() -> u32 { + 1 + } +} + +unsafe impl const Sup for () { + fn foo() -> u32 { + 42 + } +} + +unsafe impl const Sub for () {} + +#[const_trait] +pub trait A { + fn a() -> u32; +} + +impl const A for T { + default fn a() -> u32 { + 2 + } +} + +impl const A for T { + default fn a() -> u32 { + 3 + } +} + +impl const A for T { + fn a() -> u32 { + T::foo() + } +} + +const _: () = assert!(<()>::a() == 42); +const _: () = assert!(::a() == 3); +const _: () = assert!(::a() == 2); + +fn main() {} -- cgit 1.4.1-3-g733a5