Exceção inesperada em std :: ifstream
Experimentando com I / O Eu recebo uma exceção onde nenhuma exceção deveria ter sido lançada:
#include <iostream>
#include <fstream>
int main()
{
std::ifstream f("/tmp");
std::cout << "Exception Flags: " << f.exceptions() << std::endl;
if(f >> std::ws) std::cout << "This will not succeed" << std::endl;
else std::cout << "Ok - it fails" << std::endl;
return 0;
}
Mas a saída é:
Exception Flags: 0
terminate called after throwing an instance of 'std::ios_base::failure'
what(): basic_filebuf::underflow error reading the file
Aborted
g ++ (Ubuntu / Linaro 4.7.2-2ubuntu1) 4.7.2
Editar
O teste deve falhar sem exceção:
From 27.5.5.4 basic_ios flags funções
vazio claro (estado iostado = goodbit);
4 Postcondition: Se rdbuf ()! = 0, então indique == rdstate (); caso contrário, rdstate () == (state | ios_base :: badbit).
5 Efeitos: Se ((estado | (rdbuf ()? Goodbit: badbit)) e exceções ()) == 0, retorna. Caso contrário, a função lançará um objeto com falha da classe basic_ios :: failure (27.5.3.1.1), construída com valores de argumentos definidos pela implementação.
vazio setstate (estado iostate);
6 Efeitos: Chamadas de clear (estado rdstate () |) (que pode lançar basic_ios :: failure (27.5.3.1.1)).