transmute test
This commit is contained in:
parent
20679b1166
commit
3310f72db9
30
tests/ui/traits/new-solver/specialization-transmute.rs
Normal file
30
tests/ui/traits/new-solver/specialization-transmute.rs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
// compile-flags: -Ztrait-solver=next
|
||||||
|
|
||||||
|
#![feature(specialization)]
|
||||||
|
//~^ WARN the feature `specialization` is incomplete
|
||||||
|
|
||||||
|
trait Default {
|
||||||
|
type Id;
|
||||||
|
|
||||||
|
fn intu(&self) -> &Self::Id;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> Default for T {
|
||||||
|
default type Id = T;
|
||||||
|
|
||||||
|
fn intu(&self) -> &Self::Id {
|
||||||
|
self
|
||||||
|
//~^ ERROR cannot satisfy `T <: <T as Default>::Id`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
|
||||||
|
*t.intu()
|
||||||
|
}
|
||||||
|
|
||||||
|
use std::num::NonZeroU8;
|
||||||
|
fn main() {
|
||||||
|
let s = transmute::<u8, Option<NonZeroU8>>(0);
|
||||||
|
//~^ ERROR cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>
|
||||||
|
assert_eq!(s, None);
|
||||||
|
}
|
31
tests/ui/traits/new-solver/specialization-transmute.stderr
Normal file
31
tests/ui/traits/new-solver/specialization-transmute.stderr
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
warning: the feature `specialization` is incomplete and may not be safe to use and/or cause compiler crashes
|
||||||
|
--> $DIR/specialization-transmute.rs:3:12
|
||||||
|
|
|
||||||
|
LL | #![feature(specialization)]
|
||||||
|
| ^^^^^^^^^^^^^^
|
||||||
|
|
|
||||||
|
= note: see issue #31844 <https://github.com/rust-lang/rust/issues/31844> for more information
|
||||||
|
= help: consider using `min_specialization` instead, which is more stable and complete
|
||||||
|
= note: `#[warn(incomplete_features)]` on by default
|
||||||
|
|
||||||
|
error[E0284]: type annotations needed: cannot satisfy `T <: <T as Default>::Id`
|
||||||
|
--> $DIR/specialization-transmute.rs:16:9
|
||||||
|
|
|
||||||
|
LL | self
|
||||||
|
| ^^^^ cannot satisfy `T <: <T as Default>::Id`
|
||||||
|
|
||||||
|
error[E0284]: type annotations needed: cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>`
|
||||||
|
--> $DIR/specialization-transmute.rs:27:13
|
||||||
|
|
|
||||||
|
LL | let s = transmute::<u8, Option<NonZeroU8>>(0);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot satisfy `<u8 as Default>::Id == Option<NonZeroU8>`
|
||||||
|
|
|
||||||
|
note: required by a bound in `transmute`
|
||||||
|
--> $DIR/specialization-transmute.rs:21:25
|
||||||
|
|
|
||||||
|
LL | fn transmute<T: Default<Id = U>, U: Copy>(t: T) -> U {
|
||||||
|
| ^^^^^^ required by this bound in `transmute`
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors; 1 warning emitted
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0284`.
|
Loading…
x
Reference in New Issue
Block a user