Non seulement cela est valable et ne donne pas d'avertissement même avec -Wall:Pourquoi cette bizarre compatibilité de bool et de pointeurs en C++?
void* p = false; // actually 'true' doesn't work here
bool b = "Hello, Boolean!";
mais aussi cette règle de compatibilité permet la sélection d'une fonction/opérateur surchargé pour un mauvais type. Disons que vous avez surchargé votre operator <<
pour tous les types fondamentaux et vous avez oublié de surcharger le pointeur vide, alors le compilateur peut sélectionner la version qui prend bool
, ou l'inverse.
Alors qu'est-ce qui rend cette règle de compatibilité plus importante que les effets secondaires bizarres (et hautement indésirables) avec des fonctions surchargées?
(Edit: suppression de toutes les références à C, ils ont eu tort: les règles de conversion sont fondamentalement les mêmes en C.)
Le langage C avant C99 n'a pas de type 'bool' natif intégré - il est parfois émulé via' # define'. Dire que "C peut gérer cela correctement" n'a pas beaucoup de sens. –
@In silico: En C, il existe un type '_Bool' intégré. – dreamlax
@dreamlax: Droit. J'ai oublié de mentionner que le langage C avant C99 ne l'avait pas. Cependant, l'OP a utilisé 'bool' au lieu de' _Bool', donc j'ai supposé que l'OP utilisait un 'bool' émulé. –