編譯器錯誤 C2672

' function ': 找不到相符的多載函式

編譯器找不到符合指定函式的多載函式。 找不到採用比對參數的函式,或沒有相符函式在內容中具有必要的協助工具。

當特定標準程式庫容器或演算法使用時,您的類型必須提供符合容器或演算法需求的可存取成員或 friend 函式。 例如,您的反覆運算器類型應該衍生自 std::iterator<> 。 容器專案類型的比較作業或使用其他運算子,可能需要將類型視為左側運算元和右側運算元。 使用 型別做為右側運算元,可能需要實作 運算子做為型別的非成員函式。

範例

Visual Studio 2017 之前的編譯器版本未在某些範本內容中執行限定名稱的存取檢查。 這可能會干擾預期 SFINAE 行為,其中,替代預期會因無法存取名稱而失敗。 這可能會在執行階段因編譯器錯誤地呼叫運算子的錯誤多載而導致當機或意外行為。 在 Visual Studio 2017 中,會引發編譯器錯誤。

此範例會在 Visual Studio 2015 中編譯,但在 Visual Studio 2017 中引發錯誤。 若要修正此問題,請讓範本參數成員可在評估的位置存取。

#include <type_traits>

template <class T> class S {
// public:    // Uncomment this line to fix
    typedef typename T type;
};

template <class T, std::enable_if<std::is_integral<typename S<T>::type>::value, T> * = 0>
bool f(T x)
{
    return (x == 0);
}

int main()
{
    f(10); // C2672: No matching overloaded function found.
}