вызов функций выше их декларации

void foo()
{
    bar();          // error: ‘bar’ has not been declared
}

void bar()
{
}

namespace N
{
    void foo()
    {
        N::bar();   // error: ‘bar’ is not a member of ‘N’
    }

    void bar()
    {
    }
}

class C
{
    static void foo()
    {
        C::bar();   // works just fine
    }

    static void bar()
    {
    }
};

В чем причина этого несоответствия обработки вызовов функций выше их декларации? Почему я могу сделать это внутри класса, но не внутри пространства имен или в глобальной области видимости?

Ответы на вопрос(5)

Ваш ответ на вопрос