Como resolver uma colisão de nomes entre um espaço para nome C ++ e uma função global?

se eu definir um espaço para nomelog em algum lugar e torná-lo acessível no escopo global, isso colidirá comdouble log(double) do padrãocmath cabeçalho. Na verdade, a maioria dos compiladores parece concordar com ele - a maioria das versões do SunCC, MSVC, GCC -, mas o GCC 4.1.2 não.

Infelizmente, parece não haver maneira de resolver a ambiguidade, poisusing declarações não são legais para identificadores de namespace. Você sabe como eu poderia escreverlog::Log no espaço para nome global, mesmo quecmath está incluído?

Obrigado.

EDITAR: Alguém sabe o que o padrão C ++ 03 tem a dizer sobre isso? Eu teria pensado que o operador do escopo desambigua suficientemente o uso delog no exemplo de código abaixo.

#include <cmath>

namespace foo
{

namespace log
{

struct Log { };

} // namespace log

} // namespace foo


using namespace foo;

int main()
{
    log::Log x;

    return 0;
}

// g++ (GCC) 4.1.2 20070115 (SUSE Linux)

// log.cpp: In function `int main()':
// log.cpp:20: error: reference to `log' is ambiguous
// /usr/include/bits/mathcalls.h:110: error: candidates are: double log(double)
//     log.cpp:7: error:                 namespace foo::log { }
// log.cpp:20: error: expected `;' before `x'

questionAnswers(3)

yourAnswerToTheQuestion