A different way to execute a hangman game
I find this function signature quite confusing:

std::string replace_if_match(std::string&amp; write, 
                             const std::string&amp; read, const std::string&amp; match)


The names write, read, and match aren't very descriptive and everything is being passed in by reference, so what is it going to be returning?

Changing the parameter names to something like guessed_word, word_to_guess and guess might be more descriptive.  The return still feels wrong though, why not just have it return true/false to indicate if replaces have been made?

The implementation you've made doesn't really conform to the standard rules of Hangman.  One of the advantages of keeping track of characters guessed is that it ensures you only guess one character at a time.  With your current approach, it's possible to guess partial words (so you can guess 'hang' and it would find the start of 'hangman').  Character matching also encourages you to think about casing, 'H' != 'h' with your current approach.  These choices may be intentional, but it feels unexpected.