Определите, является ли тип форматируемым с заданной строкой формата во время компиляции.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

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