std :: cin.clear () no puede restaurar la secuencia de entrada en un buen estado

Para probar Bool I / O, intenté ejecutar este breve programa:

#include <iostream>

int main()
{
 while(true)
 {
  bool f;
  if (std::cin >> f)
   std::cout << f << '\n';
  else
  {
   std::cout << "i/o error\n";
   std::cin.clear();
  }
 }
 return 0;
}

Aquí está la salida que obtengo:

g++ -Wall -ansi -pedantic -o boolio boolio.cpp
./boolio
0
0
1
1
2
i/o error
-
i/o error
t
i/o error
i/o error
i/o error
... (infinite loop)

Me pregunto por qué obtengo un bucle infinito cuando ingreso 't', y cómo prevenirlo.

Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta