aaa.cpp
#include <vector>
int main()
{
std::vector<int> aaa;
std::vector<int>::iterator r = find(aaa.begin(), aaa.end(), 5);
return 0;
}
上記のコードのコンパイルが通る。本当はfind関数にはstd::を付けないとコンパイルが通ってほしくなかったんだけど・・・
自作のfind関数を使おうとしたらオーバーロードが未解決となって何が原因なのかと追っていったらstd::findがstd付けなくてもコンパイルが通ることに気付いたのが事の発端。
デバッガで追うと<xutility>のfindが呼ばれており、
ヘッダの頭とヘッダの最後に_STD_BEGIN, _STD_ENDがありそれ以外には無い事からnamespaced stdで囲まれていると思っていたのだけれど・・・
結局こっちの対応としては自作のfindを呼ぶ場合名前空間を指定する事に。どちらにせよ同じ名前空間内以外から呼ぶ場合には問題にならないので致命的ではないものの何でstd付けなくてもコンパイルが通るのか気になる・・・
(誰か知ってる方いたら教えてください・・・)
一応追加情報
・環境はVisual studio 2012 Version11.0.60315.01 Update 2
・std::vectorはstdが無いとコンパイルは通らない。