Связывание символов в анонимном пространстве имен в обычном пространстве имен

В C ++ помещение функции или переменной в анонимное пространство имен делает ее связывание внутренним, то есть таким же, как объявление ее static на уровне файла, но идиоматическим C ++ .

А как насчет анонимного пространства имен внутри обычного пространства имен? Гарантирует ли это внутренняя связь?

// foo.cpp

void func1() {
    // external linkage
}

static void func2() {
    // internal linkage
}

namespace {
    void func3() {
        // internal linkage
    }
}

namespace ns1 {
    void func4() {
        // external linkage
    }

    namespace {
        void func3() {
            // still internal linkage?
        }
    }
}
14
задан Chubsdad 15 November 2010 в 03:34
поделиться