Почему static и namespace не ограничивают область видимости?
препроцессор компилятора с++ заменяет #include на содержимое файла, который написан в <...> или "...". Если хотите ограничить область видимости, то пишите реализацию в срр, а не в h.
static не ограничивает область видимости, оно указавает на то, что данная переменная будет существовать в единственном экземпляре.