Перегрузкой оператора параметром указателя. Из источников повышения:
#ifndef BOOST_NO_SFINAE
self_type& operator=(clear_type*)
{
this->clear();
return *this;
}
#endif
Это не означает, что «func» сам по себе равен NULL, в действительности вы можете получить доступ к его собственным функциям. Следующий код компилируется и не падает.
TEST_F(CppTest, BoostFunctions) {
boost::function<void()> func;
func = NULL;
ASSERT_TRUE(func==NULL);
ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}