| // Copyright 2016 The Rust Project Developers. See the COPYRIGHT |
| // file at the top-level directory of this distribution and at |
| // http://rust-lang.org/COPYRIGHT. |
| // |
| // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or |
| // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license |
| // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your |
| // option. This file may not be copied, modified, or distributed |
| // except according to those terms. |
| |
| mod mul1 { |
| pub trait Mul {} |
| } |
| |
| mod mul2 { |
| pub trait Mul {} |
| } |
| |
| mod mul3 { |
| enum Mul { |
| Yes, |
| No |
| } |
| } |
| |
| mod mul4 { |
| type Mul = String; |
| } |
| |
| mod mul5 { |
| struct Mul{ |
| left_term: u32, |
| right_term: u32 |
| } |
| } |
| |
| #[derive(Debug)] |
| struct Foo; |
| |
| // When we comment the next line: |
| //use mul1::Mul; |
| |
| // BEFORE, we got the following error for the `impl` below: |
| // error: use of undeclared trait name `Mul` [E0405] |
| // AFTER, we get this message: |
| // error: trait `Mul` is not in scope. |
| // help: ... |
| // help: you can import several candidates into scope (`use ...;`): |
| // help: `mul1::Mul` |
| // help: `mul2::Mul` |
| // help: `std::ops::Mul` |
| |
| impl Mul for Foo { |
| //~^ ERROR cannot find trait `Mul` |
| } |
| |
| // BEFORE, we got: |
| // error: use of undeclared type name `Mul` [E0412] |
| // AFTER, we get: |
| // error: type name `Mul` is not in scope. Maybe you meant: |
| // help: ... |
| // help: you can import several candidates into scope (`use ...;`): |
| // help: `mul1::Mul` |
| // help: `mul2::Mul` |
| // help: `mul3::Mul` |
| // help: `mul4::Mul` |
| // help: and 2 other candidates |
| fn getMul() -> Mul { |
| //~^ ERROR cannot find type `Mul` |
| } |
| |
| // Let's also test what happens if the trait doesn't exist: |
| impl ThisTraitReallyDoesntExistInAnyModuleReally for Foo { |
| //~^ ERROR cannot find trait `ThisTraitReallyDoesntExistInAnyModuleReally` |
| } |
| |
| // Let's also test what happens if there's just one alternative: |
| impl Div for Foo { |
| //~^ ERROR cannot find trait `Div` |
| } |
| |
| fn main() { |
| let foo = Foo(); |
| println!("Hello, {:?}!", foo); |
| } |