Как запретить значение NULL для параметра указателя функции

У меня есть функция:

void foo(int parm11, pointer to function) {...}

и я бы хотел запретить называть его значением NULL для второго параметра. Другими словами, я хочу получить сообщение об ошибке из компилятора в следующей исходной строке С++:

foo(5, NULL);

Ответ 1

Вы можете поймать явный nullptr (и все, что конвертируется в константу нулевого указателя), поскольку оно имеет свой собственный тип:

void foo(int, pfunc_type); // Your function
void foo(int, std::nullptr_t) = delete; // The "bad" overload

Конечно, определенный пользователь все равно может передавать указатель на нулевую функцию, он просто не может этого сделать, просто указав константу нулевого указателя для аргумента.

Может быть предпочтительнее пересмотреть указатели и просто взять ссылки на функции, поскольку рекомендуется AlexD.