mod m { mod m1 { pub struct S {} } mod m2 { // Note this derive, it makes this struct macro-expanded, // so it doesn't appear in time to participate in the initial resolution of `use m::S`, // only in the later validation pass. #[derive(Default)] pub struct S {} } // Create a glob vs glob ambiguity pub use self::m1::*; pub use self::m2::*; } fn main() { use m::S; //~ ERROR `S` is ambiguous let s = S {}; }