@Th69 sagte in Constexpr Aufrufe in Templates:
Werfe stattdessen eine Exception!
Cool, das funktioniert. Ich habe nun zwei funktionierende Lösungen gefunden:
template<typename... Rest>
constexpr
bool TestFormatString_1(const std::string_view s, Rest... rest)
{
//constexpr int Count_1 = CountFormat(s); // darf ich so nicht machen
int Count_1 = CountFormat(s);
int Count_2 = CountArgs(rest...);
return Count_1 == Count_2;
}
template<typename... Rest>
constexpr
void TestFormatString_2(const std::string_view s, Rest... rest)
{
int Count_1 = CountFormat(s);
int Count_2 = CountArgs(rest...);
if (Count_1 != Count_2)
throw std::runtime_error("Anzahl der Parameter stimmt nicht mit Formatstring überein!");
}
consteval void Test()
{
TestFormatString_2("{}{}{}", 1, 2, 'c');
}
int main(int argc, char const* argv[])
{
static_assert(CountFormat("{}{}{}") == 3, "CountFormat funktioniert nicht richtig");
static_assert(CountArgs(1, 2, 'c') == 3, "CountArgs funktioniert nicht richtig");
static_assert(TestFormatString_1("{}{}{}", 3, 2, 'c'), "Anzahl der Parameter stimmt nicht mit Formatstring überein!");
Test();
return 0;
}
Ändere ich die Anzahl der Parameter, speichere die Datei ab, so schlägt Visual Studio direkt an. Sehr schön.
PS:
Wie schon gesagt das ist nur eine Spielerei.