Постоянная ошибка выражения, когда постоянная функция вызывается из другойC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Постоянная ошибка выражения, когда постоянная функция вызывается из другой

Сообщение Anonymous »

Я пытаюсь использовать возвращаемое значение из постоянной функции Uniquesize () Внутри другой постоянной функции Uniquearra для объявления массива, но это приводит к ошибке компилятора, говоря, что Uniquesize () не является постоянным выражением. массив, который компилятор только что принимает.
Почему это происходит? Может ли кто -нибудь объяснить разницу в постоянных выражениях в этих контекстах?template
consteval auto UniqueSize(Args&&... args)
{
std::vector v{std::forward(args)...};
std::sort(v.begin(), v.end());
auto newEnd = std::unique(v.begin(), v.end());
return std::distance(v.begin(), newEnd);
}

template
consteval auto UniqueArray(Args&&... args)
{
// Calling UniqueSize to determine the size of the array returned
constexpr auto sz = UniqueSize(std::forward(args)...);
std::array arr{};

std::vector v{std::forward(args)...};
std::sort(v.begin(), v.end());
auto newEnd = std::unique(v.begin(), v.end());
std::copy(v.begin(), v.end(), arr.begin());
return arr;
}

int main()
{
// This compiles fine
constexpr auto sz = UniqueSize(2, 3, 4, 4, 5, 5);
static_assert(sz == 4);
std::array array{};

// This gives an error complaining that `sz` inside UniqueArray is not a constant expression.
// auto arr = UniqueArray(2, 3, 4, 4, 5, 5);
}


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

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

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

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

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

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

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