https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104486
Bug ID: 104486 Summary: if constexpr versus -Wtype-limits Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end Assignee: unassigned at gcc dot gnu.org Reporter: drepper.fsp+rhbz at gmail dot com Target Milestone: --- One use of 'if constexpr' is to handle different type sizes. This is a simple example: #include <climits> using some_type = int; some_type f(); bool foo() { if constexpr (sizeof(some_type) == sizeof(int)) return f() == INT_MAX; else if constexpr (sizeof(some_type) == sizeof(long)) return f() == LONG_MAX; else return f() == LONG_LONG_MAX; } Compiling this code with -Wtype-limits produces warnings: g++ -std=gnu++20 -c u.cc -Wtype-limits u.cc: In function ‘bool foo()’: u.cc:12:16: warning: comparison is always false due to limited range of data type [-Wtype-limits] 12 | return f() == LONG_MAX; | ^ u.cc:14:16: warning: comparison is always false due to limited range of data type [-Wtype-limits] 14 | return f() == LONG_LONG_MAX; | ^ These statements are guarded by 'if constexpr' which causes the code in the respective branch to not be active. The warnings should be disabled for those code blocks. Again, the whole point of writing code like this is to avoid overflow errors and the like.