|  16.2.5 Namespaces 
C++ namespaces are a facility for expressing a relationship between a
set of related declarations such as a set of constants.  Namespaces also
assist in constraining names so that they will not collide with
other identical names in a program.  Namespaces were introduced to the
language in 1993 and some early compilers were known to have incorrectly
implemented namespaces.  Here's a small example of namespace usage:
 
 |  | namespace Animals {
  class Bird {
  public:
    fly (); {} // fly, my fine feathered friend!
  };
};
// Instantiate a bird.
Animals::Bird b;
 | 
 
For compilers which do not correctly support namespaces it is possible
to achieve a similar effect by placing related declarations into an
enveloping structure.  Note that this utilises the fact that C++
structure members have public protection by default:
 
 |  | 
 struct Animals {
  class Bird {
  public:
    fly (); {} // fly, my find feathered friend!
  };
protected
  // Prohibit construction.
  Animals ();
};
// Instantiate a bird.
Animals::Bird b;
 | 
 
 |