Size: a a a

2020 May 05

AM

Alexander Malkov in pro.cxx
Alex
А как узнать текущий статус пропозала? В данном случае - этого: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html
а случайно, он не указан ли в этом документе?
Published Proposal, 2020-02-14
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Проблемы быть могут, но скорее в далёком будущем, когда компиляторы станут это как то оптимизировать против тебя.

С другой стороны, в с++23 решили проблему с таким кастом опосредованно. Надо смотреть откуда data взята, если там условный malloc или другая implementation-defined функция, то это уже не UB с с++23.
Что? В С++23 stricti aliasing отменили? Давайте-ка поподробнее
источник

AM

Alexander Malkov in pro.cxx
Alex
А как узнать текущий статус пропозала? В данном случае - этого: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html
нашел этот же документ, но с другим статусом
Draft Proposal, 2019-10-06
источник

A

Alex in pro.cxx
Alexander Malkov
а случайно, он не указан ли в этом документе?
Published Proposal, 2020-02-14
и что, его обсуждали? Будут ещё обсуждать? Приняли / отклонили?
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
это UB. Так что да, могут.
Кстати, я знаю как минимум одну функцию в винапи, которую кроме как через этот каст невозможно использовать - GetTokenInformation (хотя мб я просто не знаю трюка как это сделать правильно)

Можно ли после такого считать, что такой каст не уб в msvc официально? :)
источник

A

Alex in pro.cxx
а что мешает компилятору проверить, что используется именно эта функция, и сделать для неё исключение?)
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
и что, его обсуждали? Будут ещё обсуждать? Приняли / отклонили?
Читал в статье на Хабре, что одобрили (но вроде до конца не приняли)
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
Что? В С++23 stricti aliasing отменили? Давайте-ка поподробнее
Алиасинг не отменили, добавили фичу для малоков начинать лайфтайм
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Алиасинг не отменили, добавили фичу для малоков начинать лайфтайм
Это не отменяет убовость reinterpret_cast-ов кроме трех исключений, более того, код выше комитет никогда не разрешит под угрозой всеобщего отказа от С++ в пользу С
источник

AM

Alexander Malkov in pro.cxx
нет ли новостей от Яндекса?
Не планируют ли они выпускать свой Userver - фреймворк.. очень хочется на него посмотреть..
боюсь, быстрее будет свой написать..
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Алиасинг не отменили, добавили фичу для малоков начинать лайфтайм
Ответ очень простой: как только код выше будет разрешен для типа T, компилятор больше не может оптимизировать вызов vector<T>::size() в коде
for (size_t i = 0; i < v.size(); ++i) v[i] = 0; 
как это сейчас происходит с char, unsigned char и std::byte
источник

A

Alex in pro.cxx
Побитый Кирпич
Кстати, я знаю как минимум одну функцию в винапи, которую кроме как через этот каст невозможно использовать - GetTokenInformation (хотя мб я просто не знаю трюка как это сделать правильно)

Можно ли после такого считать, что такой каст не уб в msvc официально? :)
а в чём загвоздка с этой функцией? Я её никогда раньше не встречал, но интерфейс выглядит очень стандартно для винапи
источник

AM

Alexander Malkov in pro.cxx
И очень большой/больной вопрос, будет ли реализация HTTP/2 && HTTP/3 в Boost.Beast?
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
а в чём загвоздка с этой функцией? Я её никогда раньше не встречал, но интерфейс выглядит очень стандартно для винапи
Она заполняет массив байт инфой о токене, но эта инфа нетривиально копируемая, там указатели на свои же поля грубо говоря. Из-за этого её нельзя через memcpy скастить в нормальный тип
источник

A

Alex in pro.cxx
но можно же побайтовым циклом разобрать и разложить по полям?
источник

A

Alex in pro.cxx
Alexander Malkov
нет ли новостей от Яндекса?
Не планируют ли они выпускать свой Userver - фреймворк.. очень хочется на него посмотреть..
боюсь, быстрее будет свой написать..
источник

ПК

Побитый Кирпич... in pro.cxx
Constantine Drozdov
Ответ очень простой: как только код выше будет разрешен для типа T, компилятор больше не может оптимизировать вызов vector<T>::size() в коде
for (size_t i = 0; i < v.size(); ++i) v[i] = 0; 
как это сейчас происходит с char, unsigned char и std::byte
Да, там все таки другая проблема решена и в связке с бит кастом это должно работать
источник

AM

Alexander Malkov in pro.cxx
Да.
источник

F

Fox in pro.cxx
Alex
А как узнать текущий статус пропозала? В данном случае - этого: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0593r6.html
источник

CD

Constantine Drozdov in pro.cxx
Побитый Кирпич
Кстати, я знаю как минимум одну функцию в винапи, которую кроме как через этот каст невозможно использовать - GetTokenInformation (хотя мб я просто не знаю трюка как это сделать правильно)

Можно ли после такого считать, что такой каст не уб в msvc официально? :)
Запрещен не каст, а использование результатов этого каста для чтения/записи, так что с вызовом винапи функции (да и любой С функции, скажем, strlen), код которой заведомо недоступен C++ компилятору, все хорошо
источник