Überprüfen Sie zur Laufzeit, dass ein Funktionsaufruf einen `static_assert (false)` auslöstC++

Programme in C++. Entwicklerforum
Anonymous
 Überprüfen Sie zur Laufzeit, dass ein Funktionsaufruf einen `static_assert (false)` auslöst

Post by Anonymous »

Ich habe eine Vorlagenfunktion mit verschiedenen Typparametern und abhängig von diesen Typen die Funktion "Aufrufe" ein static_assert (false) . Ich möchte wissen, wann mein Code nicht für bestimmte Kombinationen von Typparametern bei Laufzeit kompiliert wird. Ich möchte den Compiler nicht einfach den Code nicht kompilieren lassen, sondern ich möchte das zur Laufzeit wissen. static_assert fails "

Alle, während der Compiler den Code erfolgreich kompiliert, sogar die Bits, die die Funktion nicht kompilieren sollte?

Code: Select all

template 
constexpr void problematic_code()
{
if constexpr (std::is_integral_v) {
static_assert(false, "This code should not compile!");
}
}
< /code>
Der Code kompiliert nicht, wenn ich eine der folgenden < /p>
schreibe ">problematic_code();
problematic_code();
// ...
< /code>
Das ist in Ordnung! Aber gibt es einen Mechanismus in C ++ 20/33, mit dem ich eine Funktion wie
schreiben kanntemplate 
constexpr bool will_problematic_code_compile() {
if (calling problematic_code() reaches static_assert(false)) {
return false;
}
return true;
}
< /code>
Dann möchte ich einen Test wie < /p>
 schreibenTEST_CASE("") {
CHECK(not will_problematic_code_compile());
CHECK(not will_problematic_code_compile());
CHECK(will_problematic_code_compile());
}
Ich habe es ausprobiert, erfordert ,

Code: Select all

template 
constexpr bool will_problematic_code_compile()
{
return requires { problematic_code(); };
}
, aber dies gibt immer wahr.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post