どこかに名前空間を定義してグローバル スコープでアクセスできるようにすると、標準のヘッダーlog
と衝突します。実際、ほとんどのコンパイラ (SunCC、MSVC、GCC のほとんどのバージョン) はこれに対応しているようですが、GCC 4.1.2 はそうではありません。double log(double)
cmath
残念ながら、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'