Не конструируется std::istream_iterator для wchar_t | C++

Хочу посимвольно перебрать файл и поменять некоторые символы. Для этого использую такой код:

std::wifstream m_in;
std::wofstream m_out;

//....

using in_it = std::istream_iterator<wchar_t>;
using out_it = std::ostream_iterator<wchar_t>;

std::transform(in_it(m_in), in_it(), out_it(m_out), 
    [](wchar_t c) {
        
        return (c == 31 ? ';' : c);

    });

И компилятор ругается, что я не могу создать итератор для std::wifstream. Хотя у std::wifstream char_type - это wchar_t, и для итератора я указал wchar_t. Что не так я делаю?


Ответы (1 шт):

Автор решения: AR Hovsepyan
template <class T, class Сh = char, 
         class Traits = char_traits<Ch>, 
         class Diff = ptrdiff_t>
class istream_iterator{...};

Обратите внимание, что его char_type то есть Ch по умолчанию есть char, поэтому этот параметр шаблона нужно передать:

using in_it = std::istream_iterator<wchar_t, wchar_t>;
using out_it = std::ostream_iterator<wchar_t, wchar_t>;
→ Ссылка