error: reinterpret_cast from '(lambda at main.cpp:15:37)' to 'void ()' is not allowed

I want to restart my app automatically by using atexit() and execv. Here is my code:

int main(int argc, char *argv[])
{
  atexit(reinterpret_cast<void()>([argv]{execv(argv[0], argv);}));
  //other code is omitted
}

But the compiler complains that "error: reinterpret_cast from '(lambda at main.cpp:15:37)' to 'void ()' is not allowed". I am not very clear what it means. Both return type (void) and function parameter (void) are the same, why can't cast?