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