[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

18.4.1 Namespaces

A namespace is represented by a NAMESPACE_DECL node.

However, except for the fact that it is distinguished as the root of the representation, the global namespace is no different from any other namespace. Thus, in what follows, we describe namespaces generally, rather than the global namespace in particular.

The ::std namespace, however, is special when flag_honor_std is not set. When flag_honor_std is set, the std namespace is just like any other namespace. When flag_honor_std is not set, however, the ::std namespace is treated as a synonym for the global namespace, thereby allowing users to write code that will work with compilers that put the standard library in the ::std namespace. The std namespace is represented by the variable std_node. Although std_node is a NAMESPACE_DECL, it does not have all the fields required of a real namespace, and the macros and functions described here do not work, in general. It is safest simply to ignore std_node should you encounter it while examining the internal representation. In particular, you will encounter std_node while looking at the members of the global namespace. Just skip it without attempting to examine its members.

The following macros and functions can be used on a NAMESPACE_DECL:

This macro is used to obtain the IDENTIFIER_NODE corresponding to the unqualified name of the name of the namespace (see section 18.2.2 Identifiers). The name of the global namespace is `::', even though in C++ the global namespace is unnamed. However, you should use comparison with global_namespace, rather than DECL_NAME to determine whether or not a namespaces is the global one. An unnamed namespace will have a DECL_NAME equal to anonymous_namespace_name. Within a single translation unit, all unnamed namespaces will have the same name.

This macro returns the enclosing namespace. The DECL_CONTEXT for the global_namespace is NULL_TREE.

If this declaration is for a namespace alias, then DECL_NAMESPACE_ALIAS is the namespace for which this one is an alias.

Do not attempt to use cp_namespace_decls for a namespace which is an alias. Instead, follow DECL_NAMESPACE_ALIAS links until you reach an ordinary, non-alias, namespace, and call cp_namespace_decls there.

This predicate holds if the namespace is the special ::std namespace.

This function will return the declarations contained in the namespace, including types, overloaded functions, other namespaces, and so forth. If there are no declarations, this function will return NULL_TREE. The declarations are connected through their TREE_CHAIN fields.

Although most entries on this list will be declarations, TREE_LIST nodes may also appear. In this case, the TREE_VALUE will be an OVERLOAD. The value of the TREE_PURPOSE is unspecified; back-ends should ignore this value. As with the other kinds of declarations returned by cp_namespace_decls, the TREE_CHAIN will point to the next declaration in this list.

For more information on the kinds of declarations that can occur on this list, See section 18.5 Declarations. Some declarations will not appear on this list. In particular, no FIELD_DECL, LABEL_DECL, or PARM_DECL nodes will appear here.

This function cannot be used with namespaces that have DECL_NAMESPACE_ALIAS set.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

This document was generated by Charlie & on June, 17 2001 using texi2html