Предположим, у меня есть определение структуры:
struct thing
{
thing* x;
int z;
thing() : x(this), z(0) {}
void foo() const
{
this->x->z++;
}
};
Обратите внимание, что я создаю изменяемый указатель на себя (злой смех)
И тогда я могу использовать это позже следующим образом:
int main()
{
const thing c;
c.foo();
assert(c.z == 1);
c.foo();
assert(c.z == 2);
return c.z;
}
И, как вы видите, кажется, что я могу изменить постоянную ценность... это UB?