title: ‘ptr_fun(isalnum)’ won't compile in g++?
body: <p>I am attempting to compile a program in g++ which compiled fine in Visual Studio 2012.</p>
  
  <p>I am receiving the error :  <code>error: no matching function for call to ‘ptr_fun(&lt;unresolved overloaded function type&gt;)’</code></p>
  
  <p>To the best of my knowledge, I have included all the library and header files that I need. What am I missing?</p>
  
  <p>Here is my code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;algorithm&gt;
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;functional&gt;
  #include &lt;ctype.h&gt;
  #include &lt;stdio.h&gt;
  
  using namespace std;
  
  int main() {
  
      string secretWord; //to store our secret word
      string secretWordClean = ""; //given an initial value so that we can add the alpha-only characters from secretWord
      string guessedLetters; //to be loaded with _ characters equal to length of secretWord
      string incorrectlyGuessedChars = ""; //for storing our incorrectly guessed characters to be show to the user
      char individualCharGuess; //to temporarily store the individual char guess of the user
      char playAgain; //will be set to Y to play again, and tested in an if statment
      size_t countOfLetters = 0; //begine count at 0
      size_t guessesRemaining; //to store the remaining guesses of the user, will be decrimented each iteration
      int guessedUsed; //to calulate how many guesses the player used when game is complete
  
  begin_game://label which we can use to bring us back to the start of the do-while loop at any time
  
      cout &lt;&lt; "Please enter a secret word: ";
  
      std::cin &gt;&gt; std::ws;
      getline(std::cin, secretWord); 
      secretWord.erase(std::remove_if(secretWord.begin(), secretWord.end(), std::not1(std::ptr_fun(isalnum))), secretWord.end());
  
      for(int i = 0; i &lt; secretWord.length(); i++){
          if (isalpha(secretWord[i])){ 
              secretWordClean += secretWord[i];
          }
      }
  
      secretWord = secretWordClean; //assign all alpha secret word string back to original variable for better readability
      guessesRemaining = secretWord.length() * 2;
  
      for(int i = 0; i &lt; secretWord.length(); i++){
          guessedLetters += "_"; //fills guessedLetters with blanks equal to the length of the secretWord
      }
  
      do{//start of the guessing portion of game
  
          cout &lt;&lt; "Please guess a letter, you have " &lt;&lt; guessesRemaining &lt;&lt; " guesses remaining!" &lt;&lt; endl;
          cin &gt;&gt; individualCharGuess;
  
          for(int i = 0; i &lt; secretWord.length(); i++){ //every complete iteration of this for loop = one single guess
              if(secretWord[i] == individualCharGuess){
                  guessedLetters[i] = individualCharGuess; //will replace the spaces with the correct character, if guessed
                  countOfLetters++; //if any letter is guessed correctly, this indicator will be incrimented above 0
                  continue;
              }
  
              if(secretWord.find(individualCharGuess) == string::npos){
                  if(incorrectlyGuessedChars.find(individualCharGuess) == string::npos){
                      incorrectlyGuessedChars += individualCharGuess;
                  }
              }
          }
  
          if(secretWord.compare(guessedLetters) == 0){
              cout &lt;&lt; "You win! The word was: " &lt;&lt; secretWord &lt;&lt; endl;
              guessedUsed = ((secretWord.length() * 2) - guessesRemaining) + 1 ;
              cout &lt;&lt; "You used " &lt;&lt; guessedUsed &lt;&lt; " guesses." &lt;&lt; endl; 
              cout &lt;&lt; "Play again? Enter Y for Yes, or anything else to exit: ";
              cin &gt;&gt; playAgain;
              if(playAgain != 'Y'){
                  break; //exit the loop if user guesses all the letters and doesn't want to play again
              }
              else {
                  incorrectlyGuessedChars = "";
                  secretWordClean = "";
                  guessedLetters = "";
                  //continue;
                  goto begin_game;
              }
          }
  
          guessesRemaining--; //we decriment our total guesses remaining if the user does not win the game or run out of guesses
  
          if(countOfLetters &gt; 0){
              cout &lt;&lt; "You have correctly guessed a letter!" &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters you have guessed correctly so far: ";
              cout &lt;&lt; guessedLetters &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters you have guessed incorrectly so far: ";
              cout &lt;&lt; incorrectlyGuessedChars &lt;&lt; endl;
              countOfLetters = 0; //reset the counter to prepare for next iteration of do-while loop
          }
          else if (guessesRemaining &lt;= 0) {
              cout &lt;&lt; "You have run out of guesses!" &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters that you guessed correctly: ";
              cout &lt;&lt; guessedLetters &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters you guessed incorrectly: ";
              cout &lt;&lt; incorrectlyGuessedChars &lt;&lt; endl;
              cout &lt;&lt; "The secret word was: " &lt;&lt; secretWord &lt;&lt; endl;
              cout &lt;&lt; "Play again? Enter Y for Yes, or anything else to exit: ";
              cin &gt;&gt; playAgain;
              if(playAgain != 'Y'){
                  break; //exit the loop if user guesses all the letters and doesn't want to play again
              }
              else {
                  secretWordClean = "";
                  incorrectlyGuessedChars = "";
                  guessedLetters = "";
                  //continue;
                  goto begin_game;
              }
          }
          else {
              cout &lt;&lt; "You guessed wrong! Keep trying, " &lt;&lt; guessesRemaining &lt;&lt; " guesses to go!" &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters you have guessed correctly so far: ";
              cout &lt;&lt; guessedLetters &lt;&lt; endl;
              cout &lt;&lt; "Here are the letters you have guessed incorrectly so far: ";
              cout &lt;&lt; incorrectlyGuessedChars &lt;&lt; endl;
          }
  
      }while (secretWord.compare(guessedLetters) != 0 || guessesRemaining != 0); //use to repeat the request for a single char guess
  
      return 0;
  }
  </code></pre>