Im пытается поймать исключение, возникшее при ошибке при чтении файла в методе класса из основного. Упрощенный код заключается в следующем:Исключение исключения ifstream в основном
#include <iostream>
#include <fstream>
#include <string>
class A
{
public:
A(const std::string filename)
{
std::ifstream file;
file.exceptions(std::ifstream::failbit | std::ifstream::badbit);
file.open(filename);
}
};
int main()
{
std::string filename("file.txt");
try
{
A MyClass(filename);
}
catch (std::ifstream::failure e)
{
std::cerr << "Error reading file" << std::endl;
}
}
Я скомпилировать этот код:
$ g++ -std=c++11 main.cpp
Если file.txt существует ничего не происходит, но когда это не так, то программа завершается со следующей ошибкой:
terminate called after throwing an instance of 'std::ios_base::failure'
what(): basic_ios::clear
zsh: abort (core dumped) ./a.out
Но я ожидал, что код поймает исключение и покажет сообщение об ошибке. Почему он не ловит исключения?
какую версию компилятора? Здесь отлично работает. –
@Christian Hackl g ++ vresion 5.3.0 – Msegade
@Msegade Это ошибка [GCC] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66145). – LogicStuff