Почему с концепцией OuputIterator не связан тип value_type?

Я программирую библиотеку, где мне нужно создать интерфейс итератора, и я хочу сделать его как можно более общим.

template<class OutputIterator>
void receive(OutputIterator oit){
auto val = get_function< std::iterator_traits<OutputIterator>::value_type > (); // legacy function
oit = val;
}

К моему удивлению, большинство выходных итераторов value_type является void, (void делает код недействительным, потому что void переменная не может быть объявлена).

Вот два примера:

http://en.cppreference.com/w/cpp/iterator/back_insert_iterator

http://en.cppreference.com/w/cpp/iterator/ostream_iterator

Однако в обоих случаях есть очевидный связанный тип значения, я мог бы взломать каждый и «увидеть», что существует тип значения. Например back_insert_iterator::container_type::value_type (но не доступно из iterator_traits).

Почему стандарт пытается скрыть value_type выходных итераторов?

Возможно правильных условий нет value_type но есть, очевидно, некоторый тип, связанный. Это упущение? Я неправильно использую выходной итератор?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]