Я всегда получаю загадочное предупреждение, если компилирую следующий код:
template < void(*FUNC)() >
struct Bla
{
static void Do()
{
if constexpr ( FUNC != nullptr )// << compiler complains here "the address of 'void f1()' will never be NULL [-Waddress]"
{
FUNC();
}
else
{
std::cout << "Nothing" << std::endl;
}
}
};
void f1() { std::cout << "f1" << std::endl; }
int main()
{
Bla<f1>::Do();
Bla<nullptr>::Do();
}
Полное предупреждение от g ++:
[x@y ~]$ g++ -std=c++20 -g -O2 -Wall -pedantic -Wextra main.cpp
main.cpp: In instantiation of 'static void Bla<FUNC>::Do() [with void (* FUNC)() = f1]':
main.cpp:86:18: required from here
main.cpp:71:13: warning: the address of 'void f1()' will never be NULL [-Waddress]
71 | if constexpr ( FUNC != nullptr )
| ^~
Идея проверки параметров шаблона с помощью constexpr if
не получать предупреждение, если параметр является константой: -)
Я ошибаюсь или это просто ошибка cc ошибка?