Description
I was trying this code:
use std::any::Any;
pub trait Foo {
fn to_any(self: Box<Foo>) -> Box<Any>;
}
pub fn main() {
println!("GOOD");
}
I know, this doesn't make much sense, but I was expecting a proper error message. Instead, I got:
error[E0307]: invalid `self` type: std::boxed::Box<(dyn Foo + 'static)>
--> src/bin/test.rs:4:19
|
4 | fn to_any(self: Box<Foo>) -> Box<Any>;
| ^^^^^^^^
|
= note: type must be `Self` or a type that dereferences to it
= help: consider changing to `self`, `&self`, `&mut self`, or `self: Box<Self>`
error: internal compiler error: src/librustc/traits/object_safety.rs:353: Receiver when Self = () should have a Scalar ABI, found ScalarPair(Scalar { value: Pointer, valid_range: 1..=18446744073709551615 }, Scalar { value: Pointer, valid_range: 1..=18446744073709551615 })
thread 'main' panicked at 'Box<Any>', src/librustc_errors/lib.rs:600:9
note: Run with `RUST_BACKTRACE=1` for a backtrace.
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0307`.
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: rustc 1.32.0-nightly (f4a421ee3 2018-12-13) running on x86_64-apple-darwin
note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
Metadata
Metadata
Assignees
Labels
No labels