今日、いくつかのコードが送られてきました。それは std::string で std::transform を使用してすべて小文字にしています。送信者は、Visual Studio 2010 でコードを作成してコンパイルしました。
using namespace std;
string test = "TEST";
transform(test.begin(), test.end(), test.begin(), tolower);
OSxでGCCやClangを使用してコンパイルしたところ、名前空間の衝突が発生するため、コンパイルエラーが発生しました。
確かに、グローバル名前空間とローカル (::tolower と std::tolower) に対処する回答済みの質問がたくさんありますが、これは、このコードが実際に VS で機能するという事実に関するものです。
回答が欲しい質問:
- Visual Studio がこれをコンパイルするのはなぜですか?
- std:: を優先する必要があるのに、グローバル名前空間 :: にデフォルト設定 (?) するのはなぜですか?
- ideone のスニペットを次に示します (エラーあり): http://ideone.com/qvUAMw
- Heres ideone スニペット (動作) : http://ideone.com/lk0H5d
注:OSx Mountain LionでGCC 4.2とClang(425.0.24 LLVM 3.2svn)を使用しています