нашли одно место расхождения со стандартом, с не совсем понятным истоком. Почему-то при использовании std::unitbuf на потоках, не вызывался вызов flush, хотя если проследить последовательность вызовов в стандарте - он должен вызываться внутри basic_filebuf::sync, но в либе этого вызова не оказалось. Вопрос - знает ли кто почему?
Это должно хорошо воспроизводиться на годболте. Вы можете скинуть репру? И ссылки на пункты стандарта? Просто мне всегда казалось что всё наоборот -- поток когда хочет флашить вызывает sync своего буфера. А от юнитбуфа он хочет флашить в конце каждой операции (т.е. в деструкторе sentry). Поэтому идея делать flush изнутри sync кажется мне странной.
Обсуждают сегодня