Рассмотрим следующий код:
aligned_storage<sizeof(T)> buffer;
T& ref(*reinterpret_cast<T*>(&buffer));
new (&buffer) T();
Use(ref);
Контекст для этого заключается в рефакторинге некоторых глобальных объектов в объекты, которые явно инициализируются (в отличие от инициализированных компилятором во время статической инициализации), не затрагивая существующих пользователей (и без использования макросов).
Я думаю, что код вызывает неопределенное поведение при написании, но существует ли какой-либо допустимый (переносимый) способ выполнить то же самое?Самое близкое, что я могу придумать, - это использовать какой-то тип с operator T&
, но это все равно может сломать пользователей.