Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
existuje několik způsobů, jak lze objekt tohoto typu volat pomocí těchto argumentů.
Poznámky
Kompilátor zjistil nejednoznačné volání funkce zahrnující náhradní výrazy.
Examples
Následující příklad vygeneruje 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
}
Inicializace kopírování seznamu
V sadě Visual Studio 2015 kompilátor chybně zpracovával inicializaci copy-list-list stejným způsobem jako běžná inicializace kopírování; považuje pouze převod konstruktorů pro rozlišení přetížení. V následujícím příkladu sada Visual Studio 2015 zvolí MyInt(23), ale Visual Studio 2017 chybu správně vyvolá.
// 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
}