Как разрешить конфликт имен между пространством имен 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'