Skip to content

Show error E0277 when the trait bound of a struct's member's type is unsatisfied even if E0204 is also present #89137

Description

@john01dav

Given the following code: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=fbd47fd0a07c3a9a05978696f46aac3d

use std::fmt::Debug;

#[derive(Debug, Copy, Clone)]
pub struct Vector2<T: Debug + Copy + Clone>{
    pub x: T,
    pub y: T
}

#[derive(Debug, Copy, Clone)]
pub struct AABB<T>{
    pub loc: Vector2<T>,
    pub size: Vector2<T>
}

The current output is:

error[E0204]: the trait `Copy` may not be implemented for this type
  --> src/main.rs:10:17
   |
10 | #[derive(Debug, Copy, Clone)]
   |                 ^^^^
11 | pub struct AABB<T>{
12 |     pub loc: Vector2<T>,
   |     ------------------- this field does not implement `Copy`
13 |     pub size: Vector2<T>
   |     -------------------- this field does not implement `Copy`
   |
   = note: this error originates in the derive macro `Copy` (in Nightly builds, run with -Z macro-backtrace for more info)

For more information about this error, try `rustc --explain E0204`.

Ideally the output should look like:

Keeping the other error may or may not make sense, but I propose adding this, as it points more towards how to fix the issue and prevents barking up the tree of how a derive(Copy)'d type can not implement copy (there's a good answer here, but it was not immediately obvious to me upon seeing the original error).

I generated this error message by removing the derive line from the AABB struct.

error[E0277]: the trait bound `T: Copy` is not satisfied
  --> src/lib.rs:10:14
   |
4  | pub struct Vector2<T: Debug + Copy + Clone>{
   |                               ---- required by this bound in `Vector2`
...
10 |     pub loc: Vector2<T>,
   |              ^^^^^^^^^^ the trait `Copy` is not implemented for `T`
   |
help: consider restricting type parameter `T`
   |
9  | pub struct AABB<T: std::marker::Copy>{
   |                  ^^^^^^^^^^^^^^^^^^^

For more information about this error, try `rustc --explain E0277`.
error: could not compile `playground` due to 2 previous errors

This bug takes place on beta and nightly according to the Rust playground.

Activity

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

Metadata

Metadata

Labels

A-diagnosticsArea: Messages for errors, warnings, and lintsA-suggestion-diagnosticsArea: Suggestions generated by the compiler applied by `cargo fix`C-enhancementCategory: An issue proposing an enhancement or a PR with one.D-newcomer-roadblockDiagnostics: Confusing error or lint; hard to understand for new users.D-papercutDiagnostics: An error or lint that needs small tweaks.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions