https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117272
Bug ID: 117272 Summary: CWG2518 static_assert(false) when returning Product: gcc Version: 14.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: Richard1.Kellnberger at web dot de Target Milestone: --- Since gcc 13 this is valid code: ```C++ template<typename T> void f(){ static_assert(false); } int main() { } ``` This is as well: ```C++ #include <type_traits> template<typename T> void f(){ if constexpr(std::is_same_v<T, int>) { } else { static_assert(false); } } int main() { f<int>(); } ``` The `static_assert(false)` is ignored if it is not reached due to templating. If I placed it into the `if` block instead the code would be ill-formed. By the same logic the following should be valid, but it is not. ```C++ #include <type_traits> template<typename T> void f(){ if constexpr(std::is_same_v<T, int>) { return; } static_assert(false); } int main() { f<int>(); } ```