Launch: This is the one stickler. The stl gets around this because threads to launch as soon as constructed, instead of a manual launch function. I guess you could just make launch() throw or return some kind of error?
Wait: Would wait not just do nothing? It's a join command, a finished thread just keeps going here (well, with std at least throwing on any exceptions in the process), so I'd assume an invalid thread does nothing too...
Terminate: Is there a context in which SFML will be used where any way of forcibly terminating a thread is the best option? That aside, again how is are invalid thread and a finished thread different to an outside observer? Terminating a finished thread, presumably does nothing.
In the interests of honest, I've never used SFML's threading library. Always favoured boost threads, or C++11 threads when available (To simplify this I actually wrote a bit of code to drag in and turn a boost thread into the appropriate std:: versions with correct functions and parameters).