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,

0 ответов

Другие вопросы по тегам