потому что [[nodiscard]]] bool write_data(stream & s) { if (!s.write(f1_)) return false; if (!s.write(f2_)) return false; if (!s.write(f3_)) return false; return true; } это просто трешовая копипаста кода
а при попытках развивать стримы с контекстом начинается полная херня, потому что номинальный тип строки зависит от типа контекста, что делает невозможным унифицированную запись
Короче, summary: типы int, float и string это тип "семантическое никто", их параметры форматирования - форматирование семантического никто, а типы, несущие семантику, не могут быть перечислены в унифицированном контексте; как следствие - нельзя терять информацию о типе контекста, что означает шаблонную/перегруженную функцию записи и бесполезность унифицированных стримов за уровнем struct dump_interface<Object> { virtual void dump(Object) /*noexcept?*/ = 0; };
какой-то однобокий взгляд, у вас свои задачи и контекст, у меня свои. Говорить, что раз вам инструмент не подошёл, значит, он никому не нужен - странновато.