Может ли инициализатор элемента конструктора включить инициализацию другого члена?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Может ли инициализатор элемента конструктора включить инициализацию другого члена?

Сообщение Anonymous »

Право писать что-то подобное?

Код: Выделить всё

#include 

struct A {
int i, j;
constexpr A() : i((std::construct_at(&j, 2), j-1)) {}
};
constexpr A a{};
static_assert(a.i == 1);
static_assert(a.j == 2);
Здесь, i -member Инициализатор сначала инициализирует j участник с использованием std :: construct_at , затем читает его значение в J-1 .
на практике я вижу, что все GCC, MSVC и Clang принимают программу. Онлайн демонстрация: https://gcc.godbolt.org/z/yzeoppj96
Но Clang выдает предупреждение:
:5:50: warning: field 'j' is uninitialized when used here [-Wuninitialized]
5 | constexpr A() : i((std::construct_at(&j, 2), j-1)) {}
| ^
< /code>
Это выглядит противоречит, поскольку чтение ненициализированных значений в постоянных выражениях должно привести к жесткому отказу. Программа хорошо сформирована, а диагностика просто неправильная?

Подробнее здесь: https://stackoverflow.com/questions/795 ... her-member
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»