Использование constexpr std::vector, возвращаемого из функции consteval, в другой функции constevalC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование constexpr std::vector, возвращаемого из функции consteval, в другой функции consteval

Сообщение Anonymous »

У меня есть следующий код, и он работает, но он неуклюж из-за необходимости двойного вызова get_vec5.

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

namespace sr = std::ranges;
namespace sv = std::views;

template
consteval auto get_vec5() {
return std::views::iota(0,n) | sv::filter([](const int i){return i%5 == 0;}) | sr::to();
}

consteval auto get_arr5() {
constexpr int n = 42;
auto v = get_vec5();
std::array arr;
sr::copy(v, arr.begin());
return arr;
}

int main()
{
constexpr auto val = get_arr5();
fmt::println("{}", val);
}
Если я попытаюсь сделать v constexpr

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

    constexpr auto v = get_vec5();
компилятор недоволен, и я не могу использовать вызов v.size() для указания размера std::array, если v не является constexpr .
Это задуманное поведение по стандарту C++ или особенность компилятора?
Меня немного смущает то, что я не могу получить v.size() без вызова get_vec5 2 раза. Я бы подумал, что если это незаконно, то это незаконно, а если нет, то у меня должен быть способ получить его, не вызывая get_vec5 два раза.

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

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

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

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

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

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

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