Since this answer is still “unanswered,” after talking with some people from Lounge<C++>, I think I can say that it’s pretty obvious from the comments that this is due to an implementation error either on MinGW/MinGW-w64’s or pthread’s part at the time. Using gcc 4.9.1, MinGW-W64, the problem does not appear anymore. In fact, the program above appears to compile and run correctly even on a version earlier than 4.8.2 with POSIX threading.
I myself am not an expert, my guess is that the exact trip-up happens when the program appears to try to write to the same promise twice, which, I think, should be a big no-no, as an std::async should write its result only once (again, I’m not sure if I’m right here, and other comments and edits will most likely clarify).
Also, this may be a related problem: std::future exception on gcc experimental implementation of C++0x