В момент, когда вы фиксируете g
по ссылке, оно было объявлено, поэтому имя доступно для использования:
3.3.2 / 1 Точка объявления именисразу после его полного декларатора (пункт 8) и до его инициализатора
Вы можете использовать объекты ограниченным образом до их инициализации - в основном, все, что не зависит от значения, в порядке:
3.8 / 6 до начала жизни объекта, но после того, как хранилище, которое будет занимать объект, было выделено [...] любое значение glvalue, которое ссылается на исходный объект, может использоваться, нотолько ограниченным образом.[...] использование свойств glvalue, которые не зависят от его значения, четко определено.
Итак, насколько я понимаю, то, что вы делаете, четко определено.
(Хотя, будучи ультрапедантичным, я не думаю, что он указан, когда выделено хранилище для автоматического объекта, и 8.3.2 / 5 говорит, что «ссылка должна быть инициализирована для ссылки на действительный объект» без определения «действительного»msgstr ", так что есть смысл утверждать, что это не очень четко определено).