The empty function is needed for the last recursive call.
Each time void write(const first_t &first, const rest_t... rest) is called it prints out the first argument and the rest of the arguments are stored in the const rest_t... rest parameter pack.
So then the function again is called with the parameter pack as an argument. So the parameter pack will expand into a const first_t &first and into another parameter pack and the first argument will be printed. In fact it will be the second. And so on and so forth.
In the end the parameter pack will become empty (after we have printed all the arguments). So what would happen if we call write(rest...); with an empty parameter pack? It's the same as calling write();. And since we don't have a function like that defined anywhere, without it, we would get a compilation error.
This is actually really difficult to explain just by writing. I hope I got through to somewhere :D