Title
Using qualified name to reopen nested namespace
Status
nad
Section
9.8.2 [namespace.def]
Submitter
Bjarne Stroustrup

Created on 2001-09-18.00:00:00 last changed 262 months ago

Messages

Date: 2003-04-15.00:00:00

Notes from April 2003 meeting:

We're closing this because it's on the Evolution working group list.

Date: 2004-09-10.00:00:00

I received an inquiry/complaint that you cannot re-open a namespace using a qualified name. For example, the following program is ok, but if you uncomment the commented lines you get an error:

namespace A {
    namespace N {
	int a;
    }
    int b;
    namespace M {
	int c;
    }
}

//namespace A::N {
//    int d;
//}

namespace A {
    namespace M {
        int e;
    }
}

int main()
{
    A::N::a = 1;
    A::b = 2;
    A::M::c = 3;
//  A::N::d = 4;
    A::M::e = 5;
}

Andrew Koenig: There's a name lookup issue lurking here. For example:

    int x;

    namespace A {
	int x;
	namespace N {
	   int y;
	};
    }

    namespace A::N {
        int* y = &x;  // which x?
    }

Jonathan Caves: I would assume that any rule would state that:

namespace A::B {
would be equivalent to:
namespace A {
   namespace B {
so in your example 'x' would resolve to A::x

BTW: we have received lots of bug reports about this "oversight".

Lawrence Crowl: Even worse is

    int x;
    namespace A {
      int x;
    }
    namespace B {
      int x;
      namespace ::A {
         int* y = &x;
      }
    }
I really don't think that the benefits of qualified names here is worth the cost.

History
Date User Action Args
2003-04-25 00:00:00adminsetmessages: + msg879
2003-04-25 00:00:00adminsetstatus: open -> nad
2001-09-18 00:00:00admincreate