std :: cin não lança uma exceção na entrada incorreta

Eu só estou tentando escrever um programa simples que lê de cin e, em seguida, valida que a entrada é um número inteiro. Se isso acontecer, vou sair do meu loop while. Caso contrário, solicitarei a entrada do usuário novamente.

Meu programa compila e roda muito bem, o que é ótimo. Mas não solicita novas entradas se eu inserir um valor não numérico. O que da?

#include <iostream>
using namespace std;

int main() {
    bool flag = true;
    int input;
    while(flag){
        try{ 
            cout << "Please enter an integral value \n";
            cin >> input;
            if (!( input % 1 ) || input == 0){ break; }
        }
        catch (exception& e)
        { cout << "Please enter an integral value"; 
        flag = true;}
    }
    cout << input;
    return 0;
}