C++1y/C++14: присвоение объекту вне срока его жизни не допускается в константном выражении?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 C++1y/C++14: присвоение объекту вне срока его жизни не допускается в константном выражении?

Сообщение Anonymous »

Является ли следующая программа C++14/C++1y неправильной в соответствии с текущим проектом?

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

#include 

template
struct literal_array
{
T data[n];
};

template
constexpr literal_array operator+(literal_array a,
literal_array b)
{
literal_array x;

for (size_t i = 0; i < n; i++)
x.data[i] = a.data[i];

for (size_t i = 0; i < m; i++)
x.data[n+i] = b.data[i];

return x;
}

int main()
{
constexpr literal_array a = { 1, 2, 3 };
constexpr literal_array b = { 4, 5 };

constexpr auto c = a + b;
}
Сундук Clang (на момент написания статьи) дает:

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

error: constexpr variable 'c' must be initialized by a constant expression
constexpr auto c = a + b;
^   ~~~~~
assignment to object outside its lifetime is not allowed in a constant expression
x.data[i] = a.data[i];
^
in call to 'operator+({{1, 2, 3}}, {{4, 5}})'
constexpr auto c = a + b;
^
Что означает «присвоение объекту за пределами его жизни»? Время жизни x и его подобъектов охватывает функцию, так о чем же она?

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

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

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

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

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

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

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