Информация об изменениях

Сообщение Re[11]: Когда это наконец станет defined behavior? от 04.05.2023 8:24

Изменено 04.05.2023 8:34 rg45

Re[11]: Когда это наконец станет defined behavior?
Здравствуйте, T4r4sB, Вы писали:

TB>Хаха убираем const в строке 8 и даже продвинутый кланг забоялся делать предположения о КОНСТантном поле структуры


И где тут "хаха"? Читай определение, что такое const object:

https://timsong-cpp.github.io/cppwp/basic.type.qualifier#1.1

A const object is an object of type const T or a non-mutable subobject of a const object.


После снятия константности с объекта "s", "i" перестал быть подобъектом константного объекта, а значит и сам перестал быть константным объектом. Следовательно и пункт, в котором декларируется неопределенное поведение, с этого момента на "i" не распространяется:

https://timsong-cpp.github.io/cppwp/dcl.type.cv#4

Any attempt to modify ([expr.ass], [expr.post.incr], [expr.pre.incr]) a const object (basic.type.qualifier) during its lifetime ([basic.life]) results in undefined behavior.

Re[11]: Когда это наконец станет defined behavior?
Здравствуйте, T4r4sB, Вы писали:

TB>Хаха убираем const в строке 8 и даже продвинутый кланг забоялся делать предположения о КОНСТантном поле структуры


И где тут "хаха"? Читай определение, что такое const object:

https://timsong-cpp.github.io/cppwp/basic.type.qualifier#1.1
https://timsong-cpp.github.io/cppwp/basic.type.qualifier#2

A const object is an object of type const T or a non-mutable subobject of a const object.

Except for array types, a compound type ([basic.compound]) is not cv-qualified by the cv-qualifiers (if any) of the types from which it is compounded.




После снятия константности с объекта "s", "i" перестал быть подобъектом константного объекта, а значит и сам перестал быть константным объектом. Следовательно и пункт, в котором декларируется неопределенное поведение, с этого момента на "i" не распространяется:

https://timsong-cpp.github.io/cppwp/dcl.type.cv#4

Any attempt to modify ([expr.ass], [expr.post.incr], [expr.pre.incr]) a const object (basic.type.qualifier) during its lifetime ([basic.life]) results in undefined behavior.