Следующий код, насколько я понимаю, соответствует undefined по стандарту С++ (в частности, раздел 7.1.5.1.4 [dcl.type.cv]/4).
#include <iostream>
struct F;
F* g;
struct F {
F() : val(5)
{
g = this;
}
int val;
};
const F f;
int main() {
g->val = 8;
std::cout << f.val << std::endl;
}
Однако это печатает "8" с каждым параметром компилятора и оптимизации, который я пробовал.
Вопрос: Есть ли пример, который будет показывать неожиданные результаты с этим типом "неявного const_cast"?
Я надеюсь на что-то столь же эффектное, как и результаты
#include <iostream>
int main() {
for (int i = 0; i <=4; ++i)
std::cout << i * 1000000000 << std::endl;
}
на, например, gcc 4.8.5 с -O2
EDIT: соответствующий раздел из стандартного
7.1.5.1.4: За исключением того, что любой член класса, объявленный mutable (7.1.1), может быть изменен, любая попытка изменить объект const в течение его жизни (3.8) приводит к поведению undefined.
В ответ на комментарий, предлагающий дубликат; это не дубликат, потому что я прошу пример, где происходят "неожиданные" результаты.