[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/helmesjo/cppfront/main/docs/cpp2/namespaces.md [Back]  [Original]

# Namespaces

## Overview

A namespace `N` can contain declarations that are then accessed by writing `N::` or [`using`](#using) the namespace or declaration. For example:

``` cpp title="Declaring some things in a namespace" hl_lines="2 8"
//  A namespace to put all the names provided by a widget library
widgetlib: namespace = {
    widget: type = { /*...*/ }
    // ... more things ...
}

main: () = {
    w: widgetlib::widget = /*...*/;
}
```


##  `using`

A `#!cpp using` statement brings names declared in another namespace into the current scope as if they had been declared in the current scope. It has two forms:

- `#!cpp using a_namespace::a_name;` brings the single name `a_name` into scope.

- `#!cpp using namespace a_namespace;` brings all the namespace's names into scope.

For example:

``` cpp title="using statements" hl_lines="13 14 20 21"
//  A namespace to put all the names provided by a widget library
widgetlib: namespace = {
    widget: type = { /*...*/ }
    // ... more things ...
}

main: () = {
    //  Explicit name qualification
    w: widgetlib::widget = /*...*/;

    {
        //  Using the name, no qualification needed
        using widgetlib::widget;
        w2: widget = /*...*/;
        // ...
    }

    {
        //  Using the whole namespace, no qualification needed
        using namespace widgetlib;
        w3: widget = /*...*/;
        // ...
    }

    // ...
}
```



Web Proxy Viewer  |  New URL  |  Original Page