Посмотрите на этот простой код:
struct Point {
int x;
int y;
};
void something(int *);
int main() {
Point p{1, 2};
something(&p.x);
return p.y;
}
Я ожидаю, что возвращаемое значение main можно оптимизировать до return 2;, поскольку something не имеет доступа к p.y, он получает только указатель на p.x.
Но ни один из основных компиляторов не оптимизирует возвращаемое значение от main до 2. Godbolt.
Есть ли в стандарте что-то, что позволяет something модифицировать p.y, если мы только даем доступ к p.x? Если да, зависит ли это от того, имеет ли Point стандартную компоновку?
Что если я использую something(&p.y); и return p.x; вместо этого?