У меня есть некая функция возвращающая ссылку. В некоторых случаях она должна вернуть заведомо невалидную ссылку и это должно легко проверятся тем кто ее вызывал, как то так
T& f(...){
...
return *(T*)nullptr;
...
};
Это немножко странно выглядит, но работает. Но на gcc8.3.0 уже не работает
T& ref = f(...);
if(&ref){...} //<== warning: nonnull argument ‘ref’ compared to NULL
насколько я понял он при оптимизации с -O3 эту проверку выкинул, а потом улетел с сегфолтом, дооптимизировался… gcc5.4.0 нормально работает.
В общем я готов поменять ссылку на указатель (хотя это слегка испоганит кое че дальше), но скажите - а с чего это вообще отвалилось то и насколько такая нулевая ссылка плоха? Ссылка же семантически ничем от указателя не отличается…