Nieoczekiwany wyjątek w std :: ifstream
Eksperymentowanie z I / O Dostaję wyjątek, w którym nie powinno być wyjątku:
#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;
}
Ale wynik jest:
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
Edytować
Test ma się nie powieść bez wyjątku:
Z 27.5.5.4 funkcje flag basic_ios
void clear (stan iostate = goodbit);
4 Postcondition: Jeśli rdbuf ()! = 0 to state == rdstate (); w przeciwnym razie rdstate () == (state | ios_base :: badbit).
5 Efekty: Jeśli ((stan | (rdbuf ()? Goodbit: badbit)) i wyjątki ()) == 0, zwraca. W przeciwnym razie funkcja zgłasza niepowodzenie obiektu klasy basic_ios :: failure (27.5.3.1.1), skonstruowanego z wartościami argumentu zdefiniowanymi przez implementację.
void setstate (stan iostate);
6 Efekty: Wywołuje clear (stan rdstate () |) (który może wywołać basic_ios :: failure (27.5.3.1.1)).