фиктивное предупреждение для constexpr, если с параметром шаблона указателя функции - PullRequest
2 голосов
/ 10 июля 2020

Я всегда получаю загадочное предупреждение, если компилирую следующий код:

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 ошибка?

...