namespace AAA { char c; int i; int A_xyzq (int); char xyzq (char); class inA { public: int xx; int fum (int); }; enum SomeEnum { ALPHA, BETA, DELTA }; }; int AAA::inA::fum (int i) { return 10 + i; } namespace BBB { char c; int i; int B_xyzq (int); char xyzq (char); namespace CCC { char xyzq (char); }; class Class { public: char xyzq (char); int dummy; }; }; int AAA::A_xyzq (int x) { return 2 * x; } char AAA::xyzq (char c) { return 'a'; } int BBB::B_xyzq (int x) { return 3 * x; } char BBB::xyzq (char c) { return 'b'; } char BBB::CCC::xyzq (char c) { return 'z'; } char BBB::Class::xyzq (char c) { return 'o'; } void marker1(void) { return; } namespace { int X = 9; namespace G { int Xg = 10; namespace { int XgX = 11; } } } namespace C { int c = 1; int shadow = 12; class CClass { public: int x; class NestedClass { public: int y; }; }; void ensureRefs () { // NOTE (2004-04-23, carlton): This function is here only to make // sure that GCC 3.4 outputs debug info for these classes. static CClass *c = new CClass(); static CClass::NestedClass *n = new CClass::NestedClass(); } namespace { int cX = 6; namespace F { int cXf = 7; namespace { int cXfX = 8; } } } namespace C { int cc = 2; } namespace E { int ce = 4; } namespace D { int cd = 3; int shadow = 13; namespace E { int cde = 5; } void marker2 (void) { // NOTE: carlton/2003-04-23: I'm listing the expressions that I // plan to have GDB try to print out, just to make sure that the // compiler and I agree which ones should be legal! It's easy // to screw up when testing the boundaries of namespace stuff. (void) c; //cc; (void) C::cc; (void) cd; //C::D::cd; (void) E::cde; (void) shadow; //E::ce; (void) cX; (void) F::cXf; (void) F::cXfX; (void) X; (void) G::Xg; //cXOtherFile; //XOtherFile; (void) G::XgX; return; } } } extern int ensureOtherRefs (); int main () { using AAA::inA; char c1; AAA::SomeEnum var = AAA::ALPHA; using namespace BBB; c1 = xyzq ('x'); c1 = AAA::xyzq ('x'); c1 = BBB::CCC::xyzq ('m'); inA ina; ina.xx = 33; int y; y = AAA::A_xyzq (33); y += B_xyzq (44); BBB::Class cl; c1 = cl.xyzq('e'); marker1(); C::D::marker2 (); C::ensureRefs (); ensureOtherRefs (); }