Можете ли вы создать ссылку на объект до начала его жизни, а затем использовать его позже без неопределенного поведения? - PullRequest
0 голосов
/ 16 декабря 2018

Рассмотрим следующий код:

aligned_storage<sizeof(T)> buffer;
T& ref(*reinterpret_cast<T*>(&buffer));
new (&buffer) T();
Use(ref);

Контекст для этого заключается в рефакторинге некоторых глобальных объектов в объекты, которые явно инициализируются (в отличие от инициализированных компилятором во время статической инициализации), не затрагивая существующих пользователей (и без использования макросов).

Я думаю, что код вызывает неопределенное поведение при написании, но существует ли какой-либо допустимый (переносимый) способ выполнить то же самое?Самое близкое, что я могу придумать, - это использовать какой-то тип с operator T&, но это все равно может сломать пользователей.

...