Bestimmen Sie, ob ein Typ zur Kompilierungszeit mit der angegebenen Formatzeichenfolge formatierbar istC++

Programme in C++. Entwicklerforum
Anonymous
 Bestimmen Sie, ob ein Typ zur Kompilierungszeit mit der angegebenen Formatzeichenfolge formatierbar ist

Post by Anonymous »

Ich versuche, eine Möglichkeit zu finden, um festzustellen, ob eine bestimmte Formatzeichenfolge für einen bestimmten Typ zur Kompilierungszeit gültig ist.
Ich hatte erwartet, dass ein einfaches Konzept funktioniert:

Code: Select all

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

static_assert(Formattable); // OK
static_assert(!Formattable); // Fails
Aber dann habe ich erfahren, dass die erforderlichen Ausdrücke nicht ausgewertet werden, siehe cppreference
Also habe ich versucht, die interne constexpr-Maschinerie zu verwenden, aber das hat auch nicht so einfach funktioniert:

Code: Select all

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
Ich habe das Gefühl, dass mir ein offensichtlich einfacher Weg fehlt, dies zu erreichen. Irgendwelche Hinweise?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post