Если функция или класс не помещены ни в какое пространство имен, то говорят, что они находятся в глобальном пространстве имен. Так например, в примере с которым мы работаем, функция TestLoadIni находится в глобальном пространстве имен, потому что она никуда не помещена. Точно так же функция TestDocument и даже функция main, они находятся в глобальном пространстве имен. Мы с вами говорили, что using-декларация и директива using namespace действуют внутри того блока кода, в котором они объявлены. Однако, их можно использовать и в глобальном пространстве имен, то есть, например, мы в этом нашем cpp-файле можем написать using Ini::Document, и тогда везде в cpp-файле мы можем уже не указывать перед Document пространство имен. Вот например, у нас есть Ini::Document, мы убираем префикс, запускаем компиляцию, у нас все отлично компилируется, потому что вот эта вот декларация, она подсказывает компилятору, что такое Document. Или же мы можем прямо здесь написать using namespace Ini и вообще не использовать префикс Ini в нашем файле. Ну, давайте мы это сделаем, допустим уберем вот отсюда using namespace и вот здесь уберем using-декларацию, у нас нет в файле больше строчки Ini::. Запускаем компиляцию и наша программа компилируется, все хорошо, компилятор для этих коротких имен понимает где искать соответствующие им функции или классы, то есть мы за счет использования using namespace в глобальном пространстве имен сократили наш код и избавили себя от необходимости каждый раз указывать префикс. Но с такими вещами нужно быть осторожными, потому что, например, есть у вас какое-то имя, Document, и оно видно компилятору. Компилятор понимает, что такое Document. Когда мы помещаем это имя в пространство имен, мы ограничиваем его видимость, мы говорим, что теперь это имя можно видеть только через специальное окошко. В виде этого окошка выступает префикс Ini::. Когда же мы в глобальном пространстве имен вводим using-декларацию или директиву using namespace, мы убираем это окошко и снова имя Document становится видно компилятору отовсюду, то есть мы добиваемся эффекта обратного тому, который мы создаем с помощью пространства имен. А при этом мы используем пространство имен именно для того, чтобы избежать конфликтов в глобальном пространстве имен, соответственно, злоупотребляя using-декларациями и директивой using namespace, мы можем свести на нет все наши усилия от заворачивания классов в функции в пространстве имен. И отсюда следует очень важная, практическая рекомендация: минимизируйте область действия using-деклараций и директивы using namespace, то есть если вы используете их в широкой области видимости, то вы повышаете риск возникновения конфликтов имен. Когда же мы используем using-декларацию и директиву using namespace только в маленьких блоках кода, в маленьких функциях или даже внутри какого-то блока, который является частью функций, тогда вероятность того, что у нас там возникнут какие-то конфликты имен, очень низкая, поэтому запомните, что область видимости директивы using namespace и using-декларации должна быть минимальной.