Подробности
Ссылка для битовых полей в cppreference представляет следующий пример:
#include <iostream>
struct S {
// three-bit unsigned field,
// allowed values are 0...7
unsigned int b : 3;
};
int main()
{
S s = {7};
++s.b; // unsigned overflow (guaranteed wrap-around)
std::cout << s.b << '\n'; // output: 0
}
Акцент на гарантированобтекание комментарий.
Тем не менее, WG21 CWG Issue 1816 описывает некоторые возможные проблемы с нечеткой спецификацией значений битовых полей и [expr.post.incr] / 1 в последнем стандартечерновик состояний:
Значением выражения postfix ++ является значение его операнда....
Если операндом является битовое поле, которое не может представлять увеличенное значение, результирующее значение битового поля определяется реализацией.
Я не увереноднако, если это применимо также для переноса битовых полей без знака.
Вопрос
- Гарантируется ли переполнение битового поля без знака для циклического переноса?