Closed
Description
trait Foo: Send {}
impl Foo for Box<Foo> {}
fn main() {}
test.rs:3:1: 3:25 error: the trait `core::kinds::Send` is not implemented for the type `Box<Foo+'static>`
test.rs:3 impl Foo for Box<Foo> {}
^~~~~~~~~~~~~~~~~~~~~~~~
test.rs:3:1: 3:25 note: the trait `core::kinds::Send` must be implemented because it is required by `Foo`
test.rs:3 impl Foo for Box<Foo> {}
^~~~~~~~~~~~~~~~~~~~~~~~
or similarly
trait Foo: Send {}
struct Bar(Box<Foo>);
fn test() {
fn is_send<U: Send>() {}
is_send::<Bar>()
}
fn main() {}
test.rs:7:5: 7:19 error: the trait `core::kinds::Send` is not implemented for the type `Bar`
test.rs:7 is_send::<Bar>()
^~~~~~~~~~~~~~
test.rs:7:5: 7:19 note: the trait `core::kinds::Send` must be implemented because it is required by `test::is_send`
test.rs:7 is_send::<Bar>()
^~~~~~~~~~~~~~
error: aborting due to previous error
The compiler correctly tracks the Send
kind in other contexts. This properly compiles, for example:
trait Foo: Send {}
fn test<T: Foo>() {
fn is_send<U: Send>() {}
is_send::<T>()
}