自宅のvs2015communityで実験したところ

std::function<void *(void)> f0 = [](void) { return NULL; };
std::function<void *(void)> f1 = [](void) { return (void *)NULL; };
std::function<void *(void)> f2 = [](void)->void * { return NULL; };
std::function<void *(void)> f3 = [](void) { return nullptr; };

だとf0のみエラーです
gccとかでも同様なんですかね