Skip to content

Kind bounds specified as supertraits don't propagate through trait objects. #17604

Closed
@sfackler

Description

@sfackler
Member
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>()
}

Activity

huonw

huonw commented on Oct 4, 2014

@huonw
Member

Dupe of #15155.

added a commit that references this issue on Jul 28, 2024

Auto merge of rust-lang#17604 - Veykril:tt-symbols, r=Veykril

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @huonw@sfackler

        Issue actions

          Kind bounds specified as supertraits don't propagate through trait objects. · Issue #17604 · rust-lang/rust