Take the following program:
#![feature(decl_macro)]
mod c {
pub mod a {
pub mod b {
pub macro foo() {
super::super::Foo
}
fn foo() {
super::super::Foo;
}
}
}
struct Foo;
}
fn main() {
c::a::b::foo!();
}
It errors for the macro, but not for the function (Rust Playground):
error[E0425]: cannot find value `Foo` in module `super::super`
--> src/main.rs:7:31
|
7 | super::super::Foo
| ^^^ help: a function with a similar name exists (notice the capitalization): `foo`
...
10 | fn foo() {
| -------- similarly named function `foo` defined here
...
20 | c::a::b::foo!();
| --------------- in this macro invocation
|
note: unit struct `crate::c::Foo` exists but is inaccessible
--> src/main.rs:16:5
|
16 | struct Foo;
| ^^^^^^^^^^^ not accessible
= note: this error originates in the macro `c::a::b::foo` (in Nightly builds, run with -Z macro-backtrace for more info)
Can somebody explain this? I thought macros 2.0 invocation is supposed to behave "as if" it was written in the macro's module.