Я ожидал, что сработает простая концепция:
Код: Выделить всё
template
concept Formattable = requires(T p) { std::format("{.2}", p); };
static_assert(Formattable); // OK
static_assert(!Formattable); // Fails
Поэтому я попробовал использовать внутренний механизм 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/a/70374564
Я правильно добавлю это решение сюда завтра.
Если кто-нибудь придумает что-то более приятное, я с нетерпением жду этого.
Подробнее здесь: https://stackoverflow.com/questions/798 ... mpile-time
Мобильная версия