14

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) を使用しています。

うーん...おそらくコンパイラの問題です:

http://ideone.com/97XwwZ

4

3 に答える 3