error[E0599]: no method named `method` found for type `u32` in the current scope
  --> $DIR/no-method-suggested-traits.rs:23:10
   |
LL |     1u32.method();
   |          ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following traits are implemented but not in scope, perhaps add a `use` for one of them:
   |
LL | use foo::Bar;
   |
LL | use no_method_suggested_traits::foo::PubPub;
   |
LL | use no_method_suggested_traits::qux::PrivPub;
   |
LL | use no_method_suggested_traits::Reexported;
   |

error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&u32>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:26:44
   |
LL |     std::rc::Rc::new(&mut Box::new(&1u32)).method();
   |                                            ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following traits are implemented but not in scope, perhaps add a `use` for one of them:
   |
LL | use foo::Bar;
   |
LL | use no_method_suggested_traits::foo::PubPub;
   |
LL | use no_method_suggested_traits::qux::PrivPub;
   |
LL | use no_method_suggested_traits::Reexported;
   |

error[E0599]: no method named `method` found for type `char` in the current scope
  --> $DIR/no-method-suggested-traits.rs:30:9
   |
LL |     'a'.method();
   |         ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope, perhaps add a `use` for it:
   |
LL | use foo::Bar;
   |

error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&char>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:32:43
   |
LL |         fn method(&self) {}
   |            ------
   |            |
   |            the method is available for `std::boxed::Box<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
   |            the method is available for `std::pin::Pin<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
   |            the method is available for `std::sync::Arc<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
   |            the method is available for `std::rc::Rc<std::rc::Rc<&mut std::boxed::Box<&char>>>` here
...
LL |     std::rc::Rc::new(&mut Box::new(&'a')).method();
   |                                           ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope, perhaps add a `use` for it:
   |
LL | use foo::Bar;
   |

error[E0599]: no method named `method` found for type `i32` in the current scope
  --> $DIR/no-method-suggested-traits.rs:35:10
   |
LL |     1i32.method();
   |          ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope, perhaps add a `use` for it:
   |
LL | use no_method_suggested_traits::foo::PubPub;
   |

error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&i32>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:37:44
   |
LL |     std::rc::Rc::new(&mut Box::new(&1i32)).method();
   |                                            ^^^^^^
   |
   = help: items from traits can only be used if the trait is in scope
help: the following trait is implemented but not in scope, perhaps add a `use` for it:
   |
LL | use no_method_suggested_traits::foo::PubPub;
   |

error[E0599]: no method named `method` found for type `Foo` in the current scope
  --> $DIR/no-method-suggested-traits.rs:40:9
   |
LL | struct Foo;
   | ----------- method `method` not found for this
...
LL |     Foo.method();
   |         ^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following traits define an item `method`, perhaps you need to implement one of them:
           candidate #1: `foo::Bar`
           candidate #2: `no_method_suggested_traits::foo::PubPub`
           candidate #3: `no_method_suggested_traits::qux::PrivPub`
           candidate #4: `no_method_suggested_traits::Reexported`

error[E0599]: no method named `method` found for type `std::rc::Rc<&mut std::boxed::Box<&Foo>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:42:43
   |
LL |     std::rc::Rc::new(&mut Box::new(&Foo)).method();
   |                                           ^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following traits define an item `method`, perhaps you need to implement one of them:
           candidate #1: `foo::Bar`
           candidate #2: `no_method_suggested_traits::foo::PubPub`
           candidate #3: `no_method_suggested_traits::qux::PrivPub`
           candidate #4: `no_method_suggested_traits::Reexported`

error[E0599]: no method named `method2` found for type `u64` in the current scope
  --> $DIR/no-method-suggested-traits.rs:45:10
   |
LL |     1u64.method2();
   |          ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&u64>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:47:44
   |
LL |     std::rc::Rc::new(&mut Box::new(&1u64)).method2();
   |                                            ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method2` found for type `no_method_suggested_traits::Foo` in the current scope
  --> $DIR/no-method-suggested-traits.rs:50:37
   |
LL |     no_method_suggested_traits::Foo.method2();
   |                                     ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Foo>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:52:71
   |
LL |     std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method2();
   |                                                                       ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method2` found for type `no_method_suggested_traits::Bar` in the current scope
  --> $DIR/no-method-suggested-traits.rs:54:40
   |
LL |     no_method_suggested_traits::Bar::X.method2();
   |                                        ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method2` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Bar>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:56:74
   |
LL |     std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method2();
   |                                                                          ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method2`, perhaps you need to implement it:
           candidate #1: `foo::Bar`

error[E0599]: no method named `method3` found for type `Foo` in the current scope
  --> $DIR/no-method-suggested-traits.rs:59:9
   |
LL | struct Foo;
   | ----------- method `method3` not found for this
...
LL |     Foo.method3();
   |         ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method3`, perhaps you need to implement it:
           candidate #1: `no_method_suggested_traits::foo::PubPub`

error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&Foo>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:61:43
   |
LL |     std::rc::Rc::new(&mut Box::new(&Foo)).method3();
   |                                           ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method3`, perhaps you need to implement it:
           candidate #1: `no_method_suggested_traits::foo::PubPub`

error[E0599]: no method named `method3` found for type `Bar` in the current scope
  --> $DIR/no-method-suggested-traits.rs:63:12
   |
LL | enum Bar { X }
   | -------- method `method3` not found for this
...
LL |     Bar::X.method3();
   |            ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method3`, perhaps you need to implement it:
           candidate #1: `no_method_suggested_traits::foo::PubPub`

error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&Bar>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:65:46
   |
LL |     std::rc::Rc::new(&mut Box::new(&Bar::X)).method3();
   |                                              ^^^^^^^
   |
   = help: items from traits can only be used if the trait is implemented and in scope
   = note: the following trait defines an item `method3`, perhaps you need to implement it:
           candidate #1: `no_method_suggested_traits::foo::PubPub`

error[E0599]: no method named `method3` found for type `usize` in the current scope
  --> $DIR/no-method-suggested-traits.rs:69:13
   |
LL |     1_usize.method3();
   |             ^^^^^^^

error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&usize>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:70:47
   |
LL |     std::rc::Rc::new(&mut Box::new(&1_usize)).method3();
   |                                               ^^^^^^^

error[E0599]: no method named `method3` found for type `no_method_suggested_traits::Foo` in the current scope
  --> $DIR/no-method-suggested-traits.rs:71:37
   |
LL |     no_method_suggested_traits::Foo.method3();
   |                                     ^^^^^^^

error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Foo>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:72:71
   |
LL |     std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Foo)).method3();
   |                                                                       ^^^^^^^

error[E0599]: no method named `method3` found for type `no_method_suggested_traits::Bar` in the current scope
  --> $DIR/no-method-suggested-traits.rs:74:40
   |
LL |     no_method_suggested_traits::Bar::X.method3();
   |                                        ^^^^^^^

error[E0599]: no method named `method3` found for type `std::rc::Rc<&mut std::boxed::Box<&no_method_suggested_traits::Bar>>` in the current scope
  --> $DIR/no-method-suggested-traits.rs:75:74
   |
LL |     std::rc::Rc::new(&mut Box::new(&no_method_suggested_traits::Bar::X)).method3();
   |                                                                          ^^^^^^^

error: aborting due to 24 previous errors

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