error[E0277]: the trait bound `X: Copy` is not satisfied
  --> $DIR/trait-impl-bound-suggestions.rs:14:52
   |
LL |     fn return_the_constrained_type(&self, x: X) -> ConstrainedStruct<X> {
   |                                                    ^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `X`
   |
note: required by a bound in `ConstrainedStruct`
  --> $DIR/trait-impl-bound-suggestions.rs:8:29
   |
LL | struct ConstrainedStruct<X: Copy> {
   |                             ^^^^ required by this bound in `ConstrainedStruct`
help: consider further restricting type parameter `X`
   |
LL | trait InsufficientlyConstrainedGeneric<X=()> where Self: Sized, X: std::marker::Copy {
   |                                                               ++++++++++++++++++++++

error[E0277]: the trait bound `X: Copy` is not satisfied
  --> $DIR/trait-impl-bound-suggestions.rs:24:52
   |
LL |     fn return_the_constrained_type(&self, x: X) -> ConstrainedStruct<X> {
   |                                                    ^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `X`
   |
note: required by a bound in `ConstrainedStruct`
  --> $DIR/trait-impl-bound-suggestions.rs:8:29
   |
LL | struct ConstrainedStruct<X: Copy> {
   |                             ^^^^ required by this bound in `ConstrainedStruct`
help: consider further restricting type parameter `X`
   |
LL | trait InsufficientlyConstrainedGenericWithEmptyWhere<X=()> where Self: Sized, X: std::marker::Copy {
   |                                                                             ++++++++++++++++++++++

error[E0277]: the trait bound `X: Copy` is not satisfied
  --> $DIR/trait-impl-bound-suggestions.rs:16:29
   |
LL |         ConstrainedStruct { x }
   |                             ^ the trait `Copy` is not implemented for `X`
   |
note: required by a bound in `ConstrainedStruct`
  --> $DIR/trait-impl-bound-suggestions.rs:8:29
   |
LL | struct ConstrainedStruct<X: Copy> {
   |                             ^^^^ required by this bound in `ConstrainedStruct`
help: consider further restricting type parameter `X`
   |
LL | trait InsufficientlyConstrainedGeneric<X=()> where Self: Sized, X: std::marker::Copy {
   |                                                               ++++++++++++++++++++++

error[E0277]: the trait bound `X: Copy` is not satisfied
  --> $DIR/trait-impl-bound-suggestions.rs:26:29
   |
LL |         ConstrainedStruct { x }
   |                             ^ the trait `Copy` is not implemented for `X`
   |
note: required by a bound in `ConstrainedStruct`
  --> $DIR/trait-impl-bound-suggestions.rs:8:29
   |
LL | struct ConstrainedStruct<X: Copy> {
   |                             ^^^^ required by this bound in `ConstrainedStruct`
help: consider further restricting type parameter `X`
   |
LL | trait InsufficientlyConstrainedGenericWithEmptyWhere<X=()> where Self: Sized, X: std::marker::Copy {
   |                                                                             ++++++++++++++++++++++

error: aborting due to 4 previous errors

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