lectura istream después de la falla

Tengo un pequeño código para leer los datos del usuario, como a continuación:

#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>
#include<string>

using namespace std;

istream& read_dt(istream& in, vector<int>& nmbr) {
if(in) {
 nmbr.clear();

 int x;
  while(in >> x) {
   nmbr.push_back(x);
  }
  if(in.fail()) {
   string s;
   in >> s;
   in.clear();
  }
 }
 return in;
}

int main() {
 vector<int> data;
 cout << "Enter all the data: " << endl;
 read_dt(cin, data);
 cout << "Size: " << data.size() << endl;
}

Cuando compilo y ejecuto este programa anterior con los siguientes datos: 1 2 3 4 r t 5 6 7

Parece que obtengo un vector de tamaño 4 en lugar de tamaño 7. Sin embargo, lo que implementé anteriormente es que cuando un usuario proporciona entradas no válidas como datos (en este caso, 'r' y 't'), esos datos se descartan y la entrada se borra (usando in.clear ()), y las entradas restantes se "insertan" en los datos del vector.

Pero eso no parece estar sucediendo. ¿Qué estoy haciendo mal? ¿Puede ayudarme alguien, por favor?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta