Использование лямбда-функции в конструкторе constexpr с std::tieC++

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

Сообщение Anonymous »

Я пытаюсь использовать конструктор constexpr в C++17 с лямбдой, которая использует std::tie для инициализации полей в классе из кортежа.
Код похож на этот :

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

#include 

enum class Format {
UINT8,
UINT16
};

struct FormatInfo {
const char* name = nullptr;
int maxVal = 0;

constexpr explicit FormatInfo(Format fmt) {
auto set = [this](const auto&... args) constexpr {
std::tie(name, maxVal) = std::make_tuple(args...);
};

switch(fmt) {
case Format::UINT8:  set("uint8", 255); break;
case Format::UINT16: set("uint16", 65535); break;
}
}
};

int main() {
FormatInfo info(Format::UINT8); // ok
constexpr FormatInfo info2(Format::UINT8); // fails
}
Вызов конструктора как constexpr завершается неудачно, с ошибкой, связанной с вызовом функции, отличной от constexpr, внутри set. Хотя и std::tie, и std::make_tuple должны быть constexpr.
Создание самой лямбды constexpr (

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

constexpr auto set = ...
) также завершается с ошибкой, что это не является постоянным выражением.
Есть ли способ заставить это работать в C++17?

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как создать constexpr static_string из constexpr std::string_view
    Anonymous » » в форуме C++
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Как создать constexpr static_string из constexpr std::string_view
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Использование constexpr std::vector, возвращаемого из функции consteval, в другой функции consteval
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Создание карты constexpr, заполненной вызовами функции constexpr в C++ 17
    Anonymous » » в форуме C++
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Идиоматические способы использования кортежей и std::tie
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

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