Определите, является ли тип форматируемым с заданной строкой формата во время компиляции.C++

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

Сообщение Anonymous »

Я пытаюсь найти способ определить, действительна ли данная строка формата для данного типа во время компиляции.
Я ожидал, что сработает простая концепция:

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

template
concept Formattable = requires(T p) { std::format("{.2}", p); };

static_assert(Formattable); // OK
static_assert(!Formattable); // Fails
Но потом я узнал, что выражения require не оцениваются, см. cppreference.
Поэтому я попробовал использовать внутренний механизм constexpr, но это тоже не сработало так легко:

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

template
consteval bool formattable()
{
auto fmt_parse_ctx = std::format_parse_context(".2");
return std::formatter().parse(fmt_parse_ctx) == fmt_parse_ctx.end();
}

static_assert(formattable()); // OK
static_assert(!formattable()); // formattable does not compile
Мне кажется, что мне не хватает какого-то очевидного простого способа добиться этого. Есть подсказки?


Подробнее здесь: https://stackoverflow.com/questions/798 ... mpile-time
Ответить

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

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

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

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

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