Как разрешить конфликт имен между пространством имен C ++ и глобальной функцией?

если я определю пространство именlog где-то и сделать его доступным в глобальном масштабе, это столкнется сdouble log(double) от стандартаcmath заголовок. На самом деле большинство компиляторов согласны с этим - большинство версий SunCC, MSVC, GCC - но GCC 4.1.2 - нет.

К сожалению, кажется, что нет способа решить эту двусмысленность, так какusing объявления недопустимы для идентификаторов пространства имен. Ты знаешь как я мог написатьlog::Log в глобальном пространстве имен, даже еслиcmath Включено?

Благодарю.

РЕДАКТИРОВАТЬКто-нибудь знает, что по этому поводу говорит стандарт C ++ 03? Я бы подумал, что оператор области достаточно устраняет неоднозначность использованияlog в примере кода ниже.

#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'

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

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