std::андер в сочетании с reinterpret_cast
Отвечая на вопрос " Диапазон, основанный на цикле для распределенных массивов кучи ", сегодня я наткнулся на предложение использовать reinterpret_cast
привести от типа указателя к типу массива, используя std::launder
(После некоторого обсуждения мы решили опубликовать новый вопрос, так как мы не смогли найти заключение.). Приведение было сделано следующим образом (скажем, например, чтобы иметь возможность использовать циклы на основе диапазона для итерации по массиву):
int* ptr = new int[3];
auto arr_ptr = std::launder(reinterpret_cast<int (*)[3]>(ptr));
Я почти уверен, что это UB, но я не совсем уверен. Кто-нибудь достаточно тверд в C++, чтобы ответить на этот вопрос?
Я думаю, что это сводится к вопросу, если reinterpret_cast
допустимо при приведении типа ptr к типу массива, который я считаю UB, и не имеет никакого отношения к тому, использовать ли я std::launder
,