Как примирить аргумент функции contexpr не Contexpr?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как примирить аргумент функции contexpr не Contexpr?

Сообщение Anonymous »

Простая функция, такая как: < /p>

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

constexpr int f(int x) {
constexpr int y = x;
return y;
}
, кажется, не является законным, поскольку x не является contexpr . Эта жалоба подается еще до того, как я вызову функцию, которая кажется немного несправедливой, потому что я намерен использовать ее только с аргументами, которые являются contexpr .
Я могу вроде работать вокруг этой проблемы с:
template
constexpr int f() {
constexpr int y = x;
return y;
}

Но при реальном использовании это становится сложным, потому что аргумент может быть чем-то вроде std :: string_view вместо int , и это не подходит как аргумент шаблона, потому что он генерирует более сложные ошибки в отношении внутренней реализации объекта. PrettyPrint-Override ">

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

constexpr std::array easy{'h', 'e', 'l', 'l', 'o'};

constexpr struct Hard {
constexpr Hard(int n) : size_(n) {}
size_t size_;
constexpr size_t size() const { return size_; }
} hard(10);

constexpr std::string_view nope{"hello"};

template 
constexpr auto f(T s) {
return std::array();
}

auto arr_easy = f(easy);  // OK
auto arr_hard = f(hard);  // `s` isn't constexpr even though `hard` is
auto arr_nope = f(nope);  // `s` isn't constexpr even though `nope` is

// Alternative approach:
template 
constexpr auto tf() {
return std::array();
}

auto tmpl_arr_easy = tf();  // OK
auto tmpl_arr_hard = tf();  // OK
auto tmpl_arr_nope = tf();  // can't use std::string_view as template argument
Как написать функцию contexpr , которая занимает только Antexpr аргументы?


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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как примирить аргумент функции contexpr не Contexpr?
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как примирить аргумент функции contexpr не Contexpr?
    Anonymous » » в форуме C++
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Получить ошибку при использовании значения contexPR в функции contexpr
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Получить ошибку при использовании значения contexPR в функции contexpr
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Ошибка! Переменная contexpr должна быть инициализирована постоянным выражением contexpr
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

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