Хорошо, я понял, спасибо.

вопрос следует за этимодин

Давайте рассмотрим этот пример кода:

struct sso
  {
  union{
    struct {
      char* ptr;
      char size_r[8];
      } large_str;
    char short_str[16];
    };

  bool is_short_str() const{
    return *std::launder(short_str+15)=='\0'; //UB?
    }
  };

Еслиshort_str не является активным членом разыменование указателя безstd::launder будет UB. Давайте рассмотрим, что ABI правильно указан, и что мы знаем, что size_r [7] находится по тому же адресу, что и short_str [15]. Есть лиstd::launder(short_str+15) вернуть указатель наsize_r[7] когдаshort_str не является активным членом союза?

Nota: Я думаю, что это так, потому что[Ptr.launder] / 3

Байт памяти доступен через значение указателя, которое указывает на объект Y, если он находится внутри хранилища, занятого Y, объект, который взаимозаменяем с указателем Y, или непосредственно включающий объект массива, если Y является элементом массива.

Ответы на вопрос(1)

Ваш ответ на вопрос