6

次の 2 つのオーバーロードを検討してください。

template <typename T> void foo(T &) {}
template <typename T> void foo(T &&) {}

それらは潜在的にあいまいですか?

次のコードは Clang 3.4 でコンパイルされますが、GCC 4.8 では失敗します。これは、オーバーロード (最初のものはT = int、次のものはT = int&) があいまいであることを示しています。

int main()
{
    int n = 10;
    foo(n);
}

「参照へのバインディング」はオーバーロード解決の点で「完全一致」であることを認識しているため、問題は、推論の1つが他のものよりも好ましいかどうか、またはそれらが同等に優れているかどうかに帰着すると思いT = intますT = int&

4

0 に答える 0