Дэвид Родригес - dribeas уже указывал в комментарии, что стандарт дает компиляторам немного широты, когда речь идет о ссылках. Они могут или не могут занимать место; они не являются собственными объектами и т. д.
Поведение, которое вы описываете для аргументов функции ссылочного типа (исключено во время встраивания), типично для свободы, которой обладают компиляторы, когда дело доходит до ссылок. Но это свобода, а не обязанность для них. Это также не всегда возможно: когда вы вызываете SomeFunc( a>5 ? foo : bar);
, компилятор не может заменить ссылку самим референтом "."
Ваши другие примеры аналогично ничем не ограничены. Теоретически, глобальные и локальные ссылки могут быть оптимизированы, потому что ничто не остановит их. Последний пример может быть полностью встроен как exit(NasalDemons());
, потому что вы возвращаете ссылку на объект, который вышел из области видимости.