7

次のコードは、gcc と clang で正常にコンパイルされます。

template <typename T>
struct identity
{
    typedef T type;
};

template <typename T>
void foo(typename identity<T>::type);

template <typename T>
void foo(T);

int main()
{
    foo<int>(0);
}

オーバーロードの解決が最初のオーバーロード ( identity<T>::type1 つ) を選択しているようです。

誰かがオーバーロードがあいまいではない理由を説明できますか? 私が知る限り、それらの唯一の違いは、最初の引数は非推定コンテキストであり、2 番目の引数はそうではないということですが、テンプレート引数を明示的に提供しているので、私はしません。なぜそれが重要なのかわかりません。

4

1 に答える 1