LoginSignup
16
15

More than 5 years have passed since last update.

【C++】std::findがstd::付けなくてもコンパイルが通る

Last updated at Posted at 2014-11-25
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が無いとコンパイルは通らない。

16
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
15