std::pair<const char*, std::size_t>
次の 2 つの関数を考えると、ジェネリックよりも具体的であるため、を渡すと最初のオーバーロードが呼び出されることが予想されますT
。
void foo(const std::pair<const char*, std::size_t>& p)
{
std::cout << "pair" << std::endl;
}
template <class T>
void foo(const T& v)
{
std::cout << "generic" << std::endl;
}
int main()
{
const char* s = "abc";
foo(std::make_pair(s, std::size_t(3)));
}
ただし、このプログラムは次のように出力します。
generic
を明示的に受け取るオーバーロードではなく、2 番目のオーバーロードが呼び出されるのはなぜpair
ですか?
これはコンパイラの問題ですか?現在、かなり古いコンパイラ (GCC 4.1.2) を使用しています。
うーん...おそらくコンパイラの問題です: