Testing new C++11 features with Hangman
A few thoughts:

Instead of 

do {
    std::getline(words_file, word);
    words.push_back(word);
} while (!words_file.eof());


You should do

while(std::getline(words_file, word))
    words.push_back(word);
}


Otherwise, the read which causes the stream to go into an invalid state will still be pushed.

Also, why not include the filename that cannot be opened in the exception text and then output the exception text instead of the hard-coded text you have now.  As things are, you may be ignoring other exceptions (although I don't see when one would happen).  Perhaps output the exception.what() in addition to what you have now.

I would also advise splitting some of the game logic into functions -- you don't need them in multiple places as things are, but it could be easier to follow.  Things like the piece setting word_contains_letter would look better as function calls, in my opinion.

Oh, another thing:  you may want to use #ifndef NDEBUG rather than #ifdef DEBUG, as that is the default way to check whether debugging is enabled or not.