Llamando funciones por encima de su declaración.

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()
    {
    }
};

¿Cuál es la razón detrás de esta inconsistencia en el tratamiento de llamadas a funciones por encima de su declaración? ¿Por qué puedo hacerlo dentro de una clase, pero no dentro de un espacio de nombres o en el ámbito global?

Respuestas a la pregunta(5)

Su respuesta a la pregunta