Est ce morceau de code valide (et de comportement défini)?
int &nullReference = *(int*)0;
Les deux g++ et clang++ compiler sans aucun avertissement, même lors de l'utilisation d' -Wall
, -Wextra
, -std=c++98
, -pedantic
, -Weffc++
...
Bien sûr, la référence n'est pas réellement nulle, car elle ne sera pas accessible (ça voudrait dire déréférencement d'un pointeur null), mais nous n'avons pu vérifier si elle est null ou non par la vérification de son adresse:
if( & nullReference == 0 ) // null reference