为什么下面的代码会打印“0”作为输出?
#include <functional>
#include <iostream>
int main()
{
typedef void (*fp_t)();
fp_t fp = nullptr;
std::function<void()> f = fp;
std::cout << (f == nullptr) << '\n';
}
我已经使用 gcc 4.7.2 和 MSVC-11.0 对其进行了测试。
我认为它应该打印“1”,因为标准中的以下引用:
ISO/IEC 14882:2011
20.8.11.2.1 函数构造/复制/销毁[func.wrap.func.con]
template<class F> function(F f);
template<class F, class A> function(allocator_arg_t, const A& a, F f);
...
8后置条件:
!*this
如果以下任何一项成立: —f
是NULL
函数指针。—f
是NULL
指向成员的指针。—F
是函数类模板的一个实例,并且!f