Considérez le code suivant.
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017 ne compile pas cela. Il suppose qu'il y a un appel surchargé ambigu, comme 1-1
c'est le même 0
et donc peut être converti en double*
. D'autres astuces, comme 0x0
, 0L
ou static_cast<int>(0)
, ne fonctionnent pas non plus. Même déclarer un const int Zero = 0
et appeler f(Zero)
produit la même erreur. Cela ne fonctionne correctement que siZero
n'est pas le cas const
.
Il semble que le même problème s'applique à GCC 5 et inférieur, mais pas à GCC 6. Je suis curieux de savoir si cela fait partie de la norme C ++, d'un bogue MSVC connu ou d'un paramètre du compilateur. Un rapide Google n'a pas donné de résultats.
1-1
un littéral entier ? Il s'agit d'une expression contenant deux littéraux entiers avec une valeur1
et un-
opérateur.