diff options
| author | Deadbeef <ent3rm4n@gmail.com> | 2022-09-24 06:02:49 +0000 |
|---|---|---|
| committer | Deadbeef <ent3rm4n@gmail.com> | 2022-09-24 06:22:59 +0000 |
| commit | a480ab6839ff88a770ca87faf4a4cadcb001bcbe (patch) | |
| tree | 5f44ba11b7193aa62166d8cfb0bff241bbfa3c5f /src/test/ui | |
| parent | e1c28e0c857280ce829beab16ef6082cd518db98 (diff) | |
| download | rust-a480ab6839ff88a770ca87faf4a4cadcb001bcbe.tar.gz rust-a480ab6839ff88a770ca87faf4a4cadcb001bcbe.zip | |
Allow specializing on const trait bounds
Diffstat (limited to 'src/test/ui')
| -rw-r--r-- | src/test/ui/specialization/const_trait_impl.rs | 55 |
1 files changed, 55 insertions, 0 deletions
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<T: ~const Default> const A for T { + default fn a() -> u32 { + 2 + } +} + +impl<T: ~const Default + ~const Sup> const A for T { + default fn a() -> u32 { + 3 + } +} + +impl<T: ~const Default + ~const Sub> const A for T { + fn a() -> u32 { + T::foo() + } +} + +const _: () = assert!(<()>::a() == 42); +const _: () = assert!(<u8>::a() == 3); +const _: () = assert!(<u16>::a() == 2); + +fn main() {} |
