Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
istnieje wiele sposobów wywoływanych przez obiekt tego typu za pomocą tych argumentów
Uwagi
Kompilator wykrył niejednoznaczne wywołanie funkcji z udziałem zastępców.
Przykłady
Poniższy przykład generuje kod 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
}
Inicjowanie listy kopiowania
W programie Visual Studio 2015 kompilator błędnie potraktował inicjowanie kopiowania listy w taki sam sposób jak zwykłe inicjowanie kopii; rozważał tylko konwertowanie konstruktorów na potrzeby rozpoznawania przeciążeń. W poniższym przykładzie program Visual Studio 2015 wybiera pozycję MyInt(23), ale program Visual Studio 2017 poprawnie zgłasza błąd.
// 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
}