最近書いているコードで、奇妙な動作に気付きました。
make_pair
最初の引数を で使用すると、名前空間で「魔法のように」使用可能std::pair
になります (修飾子make_pair
を使用する必要はありません)std::
#include <iostream>
int main()
{
int i1 = 2; int i2 = 10; int i3 = 0;
// constructing a pair using std::make_pair, everything's okay
std::pair<int,int> key = std::make_pair(i1, i2);
// here, why is make_pair suddenly magically available without the
// std:: namespace qualifier?
// At the same time, using ::make_pair yields and error
// (make_pair has not declared...)
std::pair<std::pair<int,int>, int> mypair = make_pair(key, i3);
std::cout << mypair.first.first << "\n";
std::cout << mypair.first.second << "\n";
std::cout << mypair.second << "\n";
return 0;
}
は問題なくコンパイルされ(を使用-Wall and -pedantic-errors
)、次のように出力されます。
2
10
0
なぜこうなった?私は cppreference を調べましたが、この動作が正しいというヒントは見つかりませんでした。何か不足していますか?
参考までに、gcc 4.6.3 を使用しています