Все стандартные реализации, которые я пробовал, позволяют присваивать значения std::ostream_iterator
без их разыменования перед присваиванием. Хотя стандартные алгоритмы разыменовывают итераторы перед присваиванием, я хотел бы знать, почему существуют реализации, которые не просто запрещают присваивание статически (с помощью прокси-класса), так что компиляция просто не удалась бы, так что пользователь знает, что что-то не так может произойти, если такое назначение перенесено в другую реализацию, не позволяющую назначение по некоторым причинам.
В целом, при реализации стандартной функциональности целесообразно ли ограничивать реализацию только тем, что прямо указано в стандарте?
#include <iterator>
#include <string>
#include <iostream>
using namespace std;
int main() {
ostream_iterator<string> o(cout);
o = "Hello World\n"; // o is not dereferenced! It compiles with my GCC environment
o++; // to make sure the implementation writes to cout
}