Почему мы можем сказать, что bar не нарушает правило строгого алиасинга?
blockquote>Если код, вызывающий bar, не нарушает строгое алиасинг, bar тоже не будет нарушать строгое алиасинг. .
Позвольте мне привести пример.
Предположим, мы называем bar следующим образом:
int x; long y; bar(&x, &y);
Строгое алиасирование требует, чтобы два указателя разных типов не ссылались на одну и ту же память. & amp; x и & amp; y - это разные типы, и они относятся к разной памяти. Это не нарушает строгий псевдоним.
С другой стороны, скажем, мы называем это так:
long y; bar((int *) &y, &y);
Теперь мы нарушили строгий псевдоним. Тем не менее, нарушение является ошибкой вызывающего абонента.