#include <iostream>
using namespace std;

namespace Module1 {
    class X {};
}

namespace Module2 {
    void foo(){ cout << "foo of Module2 invoked" << endl; }
    void bar(){ cout << "bar of Module2 invoked" << endl; }
}

namespace Module3 {
    using namespace Module1;
    typedef X Y;
    using Module2::foo;
    class Z {};
}

int main() 
{
    Module3::X x;
    Module3::Y y;
    Module3::foo();
    //  Module3::bar();       // ERROR.  No bar in Module3.
    return 0;
}