Q:

Why do I not need to include main.cpp?

In the small example needsExtern.cpp needs the definition of global::bar. needsExtern.cpp would normally include the file with the definition (in this case main.cpp). However, since the file is main.cpp it is not needed.
Why does needsExtern.cpp not need to include main.cpp?
needsExtern.h
struct NeedsExtern
{
    NeedsExtern();
};

needsExtern.cpp
#include "needsExtern.h"
#include <iostream>

namespace global
{
    extern const int bar;
}

NeedsExtern::NeedsExtern()
{
    std::cout << global::bar << "\n";
}

main.cpp
#include "needsExtern.h"

namespace global
{
    extern const int bar{26};
}

void main()
{
    NeedsExtern ne;
}

A:

This is precisely where extern is invented for: the compiler just assumes the variable is defined elsewhere in the project. You can read more about this principle here.

