The following standard conversion sequences are unsupported:
int f0(long double) { return 0; }
int f0(double) { return 1; }
float f = 2.3f;
value = f0(f); //should be 1
-----------^------------- ERROR ambiguous
int f0(char) { return 0; }
int f0(int) { return 1; }
short s = 5;
value = f0(s);
-----------------^------------- ERROR ambiguous
int f0(void *) { return 0; }
int f0(int) { return 1; }
value = f0((short) 0);
----------------^------------- ERROR ambiguous
A conversion sequence that consists of a standard conversion sequence, followed by a conversion constructor and a standard conversion sequence, is considered a user-defined conversion sequence by overload resolution and is unsupported. Example:
char k = 'a';
char * kp = &k;
struct S0 {
S0(...) { flag = 0; }
S0(void *) { flag = 1; }
};
const S0& s0r = kp;
-----------------^-----ERROR: Illegal cast-operation