Considera il seguente codice.
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017 non lo compila. Immagina che ci sia un'ambigua chiamata sovraccaricata, così come 1-1è 0e può essere convertita in double*. Anche altri trucchi, come 0x0, 0Lo static_cast<int>(0), non funzionano. Anche la dichiarazione di a const int Zero = 0e la chiamata f(Zero)producono lo stesso errore. Funziona correttamente solo se Zeronon lo è const.
Sembra che lo stesso problema si applichi a GCC 5 e precedenti, ma non a GCC 6. Sono curioso di sapere se questa è una parte dello standard C ++, un bug MSVC noto o un'impostazione nel compilatore. Un Google superficiale non ha prodotto risultati.
1-1un numero intero ? È un'espressione contenente due letterali interi con valore1e un-operatore.