Псевдонимы в основном обсуждаются в §3.10 [basic.lval] / 10:
Если программа пытается получить доступ к сохраненному значению объекта через glvalue, отличный от одного из
Для следующих типов поведение не определено: 52
- динамический тип объекта,
- cv-квалифицированная версия динамического типа объекта,
- тип, аналогичный (как определено в 4.4) динамическому типу объекта,
- тип, который является типом со знаком или без знака, соответствующим динамическому типу объекта,
- тип, который является типом со знаком или без знака, соответствующим cv-квалифицированной версии динамического типа
объекта,
- агрегированный или объединенный тип, который включает один из вышеупомянутых типов среди своих элементов или не
члены статических данных (включая, рекурсивно, элемент или нестатический член данных субагрегата
или содержащий союз),
- тип, который является (возможно, cv-квалифицированным) типом базового класса динамического типа объекта,
- a
char
или unsigned char
type.
52) Цель этого списка - указать те обстоятельства, при которых объект может или не может иметь псевдоним.
Так, например,
int x = 1;
*(char*)(&x); // (implementation-)defined
*(unsigned*)(&x); // (implementation-)defined
*(float*)(&x); // undefined
Следующие упоминания также могут быть интересными.
* * §5.17 одна тысяча тридцать восемь [expr.ass] / 8
Если значение, хранящееся в объекте, доступно из другого объекта, который каким-либо образом перекрывает хранилище
первый объект, затем перекрытие должно быть точным, и оба объекта должны иметь одинаковый тип, в противном случае
поведение не определено. [ Примечание : это ограничение применяется к отношениям между левой и правой сторонами
операция присваивания; это не утверждение о том, как цель назначения может быть псевдонимом в
генеральный. Смотри 3.10. - конечная нота ]
§17.6.4.9 [res.on.arguments] / 1 pt 3:
Если аргумент функции привязывается к ссылочному параметру rvalue, реализация может предполагать, что
этот параметр является уникальной ссылкой на этот аргумент. … [
Реализация свободна для оптимизации проверок псевдонимов, которые могут потребоваться, если
lvalue.]
§26.6.2 [valarray.syn] / 2:
Классы массива valarray
определены как свободные от определенных форм псевдонимов, что позволяет выполнять операции с
эти классы должны быть оптимизированы.
, а остальная часть <valarray>
также обсуждает, как класс должен быть реализован, чтобы избежать наложения данных.