Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
det finns flera sätt att anropa ett objekt av den här typen med dessa argument
Anmärkningar
Kompilatorn identifierade ett tvetydigt funktionsanrop som involverade surrogater.
Examples
I följande exempel genereras C3066:
// C3066.cpp
template <class T, class U> void func(T*, U*){}
typedef void (*PF)(const int*, const char*);
typedef void (*PF1)(const int*, volatile char*);
struct A {
operator PF() const {
return func;
}
operator PF1() {
return func;
}
operator PF1() const {
return func;
}
};
int main() {
A a;
int i;
char c;
a(&i, &c); // C3066
a(&i, (const char *) &c); // OK
}
Kopieringsbaserad listinitiering
I Visual Studio 2015 behandlade kompilatorn felaktigt kopieringslistans initiering på samma sätt som vanlig kopieringsinitiering. det övervägde endast att konvertera konstruktorer för överbelastningsmatchning. I följande exempel väljer Visual Studio 2015 MyInt(23), men Visual Studio 2017 genererar på rätt sätt ett felmeddelande.
// From https://www.open-std.org/jtc1/sc22/wg21/docs/cwg_closed.html#1228
struct MyList {
explicit MyStore(int initialCapacity);
};
struct MyInt {
MyInt(int i);
};
struct Printer {
void operator()(MyStore const& s);
void operator()(MyInt const& i);
};
void f() {
Printer p;
p({ 23 }); // C3066: there are multiple ways that an object of this type can be called with these arguments
}