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
è 0
e può essere convertita in double*
. Anche altri trucchi, come 0x0
, 0L
o static_cast<int>(0)
, non funzionano. Anche la dichiarazione di a const int Zero = 0
e la chiamata f(Zero)
producono lo stesso errore. Funziona correttamente solo se Zero
non 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-1
un numero intero ? È un'espressione contenente due letterali interi con valore1
e un-
operatore.