https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94554
Bug ID: 94554 Summary: spurious -Waddress warning within "if constexpr" function-null compares Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: myriachan at gmail dot com Target Milestone: --- The following with -std=c++17 -Waddress: int meow() { return 1; } void kitty(int); template <int (*F)()> void test() { if constexpr (F) { kitty(F()); } else { kitty(2); } } template void test<nullptr>(); template void test<meow>(); gives a spurious/pointless warning: <source>: In instantiation of 'void test() [with int (* F)() = meow]': <source>:12:26: required from here <source>:5:5: warning: the address of 'int meow()' will never be NULL [-Waddress] 5 | if constexpr (F) { | ^~ The warning should be suppressed in "if constexpr" contexts, because of course it's going to be always true or always false. Clang errors on this case, so it's possible that my code is invalid: Is it legal to compare a function pointer against null in a constant-expression?