Go to the first, previous, next, last section, table of contents.


5.5 C++ Namespace and Using Declarations

The grammar for the C++ namespace constructs is the same as in the coming C++ standard (see section r.3.3.1.1 of [Stroustrup95] and [ANSI95]). (See section 5.2.3.2 Class and Namespace Names for the syntax of namespace-name.) The namespace constructs affect the visibility of names as in C++, and must be implemented by the same constructions in the C++ code.

namespace-definition ::= namespace [ identifier ] { [ declaration-seq ] }
        | namespace original-namespace-name { [ declaration-seq ] }
declaration-seq ::= [ declaration-seq ] declaration
namespace-alias-definition ::= namespace identifier = complete-namespace-name ;
using-declaration ::= using qualified-id ;
        | using typename [ :: ] nested-name-specifier type-name ;
type-name ::= class-name | non-class-type-name|
using-directive ::= using namespace complete-namespace-name ;

See section 9.1 Ghost Variables for the syntax and semantics of spec-decl.

The following are examples of namespace-definitions.

// @(#)$Id: namespace_definition.lh,v 1.9 1998/09/21 20:41:48 leavens Exp $

namespace TerminalUtilities {
  enum WhatToDo { flash, freeze, thaw, home, beep };
  int x_pos = 0;
  int y_pos = 0;
}

//@ uses NoInformation(TerminalControllerClass);

namespace TerminalUtilities {  // extension of existing namespace
  class TerminalControllerClass {
  public:
    void TermControl(WhatToDo what) throw();
    int num_lines;
    // ...
  };
  typedef TerminalControllerClass TermControl;
  namespace AGratuitousNamespace {
     int x;
  }
}

The following are examples of namespace-alias-definitions.

// @(#)$Id: namespace_alias.lh,v 1.6 1998/09/21 20:41:37 leavens Exp $
#include "namespace_definition.lh"
namespace Term = TerminalUtilities;
namespace TermAGNamespace = TerminalUtilities::AGratuitousNamespace;
namespace TG = Term::AGratuitousNamespace;

The following are examples of using-declarations.

// @(#)$Id: using_declaration.lh,v 1.4 1997/01/04 17:22:02 leavens Exp $
#include "namespace_alias.lh"
using Term::x_pos;
using ::TerminalUtilities::TerminalControllerClass::num_lines;

The following is an example of a using-directives.

// @(#)$Id: using_directive.lh,v 1.4 1997/01/04 17:22:41 leavens Exp $
#include "namespace_alias.lh"
using namespace Term;


Go to the first, previous, next, last section, table of contents.