std::bit_cast<T*> должен проверять выравнивание

ilnurkh
ilnurkh

в текущем предложение к C++20 std::bit_cast<T*> не отличается от reintrepret_cast<T*>

предлагается этот случай обработать и сделать дополнительные проверки, например проверять выравнивание указателей.

2
рейтинг
в разработке
2 комментария
yndx-antoshkka

Мне ответил автор bit_cast приблизительно следующее:

Ему не кажется данное предложение хорошей идеей, т.к. bit_cast это no-op меняющий тип у битов. Alignment ортогонален bit_cast, так как проблема не возникает при представлении битов, а лишь при попытке такой указатель разадресовать. Подобное ловится санитайзерами, и может быть вполне валидным кодом в ряде случаев, где полученные указатели не разадресоввываются. В добавок, добавление подобного SFINAE пагубно повлияет на переносимость кода, так как alignment сильно различается на ряде платформ.

У кого какие идеяи/коментарии?

yndx-antoshkka
Andrey Davydov

yndx-antoshkka, в первой ревизии bit_cast ведь в принципе не мог работать с указателями. И хотя от этого решили отказаться, конвертирование указателей по-прежнему не имеет смысла, разыменование сконвертированного указателя все так же нарушает aliasing rules, так что какой смысл накладывать ограничения на alignment?

Andrey Davydov
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения