C++17 can define nested namespaces with a compact outer::inner spelling.

nested namespace Nested namespaces organize names into levels, such as `school::grades`.

Nested Namespaces

score
nested_namespaces.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
#include <string>

namespace school::grades {
std::string letter(int score) {
    if (score >= 90) {
        return "A";
    }
    if (score >= 80) {
        return "B";
    }
    return "C";
}
}

int main() {
    int score = 85;

    std::string grade = school::grades::letter(score);

    std::cout << "score=" << score << std::endl;
    std::cout << "grade=" << grade << std::endl;
    return 0;
}
#include <iostream>
#include <string>

namespace school::grades {
std::string letter(int score) {
    if (score >= 90) {
        return "A";
    }
    if (score >= 80) {
        return "B";
    }
    return "C";
}
}

int main() {
    int score = 72;

    std::string grade = school::grades::letter(score);

    std::cout << "score=" << score << std::endl;
    std::cout << "grade=" << grade << std::endl;
    return 0;
}
#include <iostream>
#include <string>

namespace school::grades {
std::string letter(int score) {
    if (score >= 90) {
        return "A";
    }
    if (score >= 80) {
        return "B";
    }
    return "C";
}
}

int main() {
    int score = 93;

    std::string grade = school::grades::letter(score);

    std::cout << "score=" << score << std::endl;
    std::cout << "grade=" << grade << std::endl;
    return 0;
}
  1. score ← 85

    16int main() {17    int score→ 85 = 85; //@score=72, 931819    std::string grade = school::grades::letter(score85);
  2. std::string letter(int score)

    4namespace school::grades {5std::string letter(int score85) {6    if (score >= 90) {
  3. if (score >= 80)

    8}9if (score85 >= 80) {10    return "B";11}
  4. grade ← B

    19    std::string grade→ B = school::grades::letter(score85);2021    std::cout << "score=" << score85 << std::endl;22    std::cout << "grade=" << gradeB << std::endl;23    return 0;24}
    outputscore=85
    grade=B
  1. score ← 72

    16int main() {17    int score→ 72 = 72;1819    std::string grade = school::grades::letter(score72);
  2. std::string letter(int score)

    4namespace school::grades {5std::string letter(int score72) {6    if (score >= 90) {7        return "A";8    }9    if (score >= 80) {10        return "B";11    }12    return "C";13}
  3. grade ← C

    19    std::string grade→ C = school::grades::letter(score72);2021    std::cout << "score=" << score72 << std::endl;22    std::cout << "grade=" << gradeC << std::endl;23    return 0;24}
    outputscore=72
    grade=C
  1. score ← 93

    16int main() {17    int score→ 93 = 93;1819    std::string grade = school::grades::letter(score93);
  2. std::string letter(int score)

    4namespace school::grades {5std::string letter(int score93) {6    if (score >= 90) {
  3. if (score >= 90)

    5std::string letter(int score) {6    if (score93 >= 90) {7        return "A";8    }
  4. grade ← A

    19    std::string grade→ A = school::grades::letter(score93);2021    std::cout << "score=" << score93 << std::endl;22    std::cout << "grade=" << gradeA << std::endl;23    return 0;24}
    outputscore=93
    grade=A