Sdílet prostřednictvím


Chyba kompilátoru C2672

'function': Nebyla nalezena žádná odpovídající přetížená funkce.

Kompilátor nemohl najít přetíženou funkci, která odpovídá zadané funkci. Nebyla nalezena žádná funkce, která přebírá odpovídající parametry nebo žádná odpovídající funkce nemá požadovanou přístupnost v kontextu.

Při použití určitých standardních kontejnerů nebo algoritmů knihovny musí vaše typy poskytovat přístupné členy nebo přátelské funkce, které splňují požadavky kontejneru nebo algoritmu. Například typy iterátoru by měly být odvozeny od std::iterator<>. Operace porovnání nebo použití jiných operátorů u typů elementů kontejneru mohou vyžadovat, aby byl typ považován za levý i pravý operand. Použití typu jako pravého operandu může vyžadovat implementaci operátoru jako nečlenské funkce typu.

Příklad

Verze kompilátoru před sadou Visual Studio 2017 neprovádí kontrolu přístupu u kvalifikovaných názvů v některých kontextech šablony. To může kolidovat s očekávaným chováním SFINAE, kdy se očekává selhání nahrazení kvůli nedostupnosti názvu. To může způsobit chybové ukončení nebo neočekávané chování za běhu kvůli nesprávnému volání nesprávného přetížení operátoru kompilátoru. V sadě Visual Studio 2017 se vyvolá chyba kompilátoru.

Tento příklad se zkompiluje v sadě Visual Studio 2015, ale vyvolá chybu v sadě Visual Studio 2017. Pokud chcete tento problém vyřešit, zpřístupněte člena parametru šablony, kde se vyhodnocuje.

#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.
}