Почему std :: copy (из istream в ostream) вызывает исключение ios :: failure?

Следующий код должен копировать данные из wifstream в wcout. После копирования содержимого программа генерирует исключение ios :: failure.

#include <string>
#include <iostream>
#include <sstream>
#include <fstream>
#include <locale>
#include <iterator>
#include <algorithm>


int main(void)
{
    std::locale::global(std::locale(""));

    std::wifstream is;
    is.exceptions( std::ios::failbit | std::ios::badbit );
    is.open("test.ts", std::ios::binary);

    is >> std::noskipws;

    std::istream_iterator<wchar_t, wchar_t> in(is);
    std::istream_iterator<wchar_t, wchar_t> end;

    std::copy(in, end,
              std::ostream_iterator<wchar_t, wchar_t>(std::wcout));

    return 0;
} 

Поток должен выдавать исключение только (см. Маску исключения), если что-то пойдет не так, но не в EOF.

8
задан Martin York 4 November 2010 в 17:29
поделиться