Почему следующий код печатает "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 function construct/copy/destroy [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