Consider this: namespace A { namespace B { namespace C { int x = 5; int nsfunc () { return x; } } } } namespace Q = A::B; int xfun() { return Q::C::x; // Breakpoint xfun } using namespace Q::C; int yfun() { return x; // Breakpoint yfun } int main(){ return xfun() + yfun(); } If you stop in xfun, then "print x" should fail. Currently it prints A::B::C::x. The bug here is that "using" statements aren't properly scoped. Implementing this would probably require something like the macro code's scope stuff to be available for using / blocks as well.
This is working since gdb-14.1, I think it was fixed by this commit: https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=68ce1575fc902958a9b1d197e2c79ea842a7776d Now you get: ``` Breakpoint 1, xfun () at gdb-13383.cpp:16 16 return Q::C::x; // Breakpoint xfun ^ (gdb) p x No symbol "x" in current context. (gdb) c Continuing. Breakpoint 2, yfun () at gdb-13383.cpp:22 22 return x; // Breakpoint yfun ^ (gdb) p x $1 = 5 ```