Я пишу partition
функцию, и это специализация для Bidirectional
и Forward
Итераторов.
И я не уверен, влияет ли порядок на результат, то есть, если эти две версии разные.
первый
template< class BIter, class UnaryPredicate>
BIter __partition( BIter first,
BIter last,
UnaryPredicate pred,
std::bidirectional_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter __partition(FIter first,
FIter last,
UnaryPredicate pred,
std::forward_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter newton::partition(FIter first,
FIter last,
UnaryPredicate pred)
{
return newton::__partition(first, last, pred, std::__iterator_category(first));
}
второй
template<typename FIter, typename UnaryPredicate> FIter
__partition(FIter first,
FIter last,
UnaryPredicate pred,
std::forward_iterator_tag);
template< class BIter, class UnaryPredicate>
BIter __partition(BIter first,
BIter last,
UnaryPredicate pred,
std::bidirectional_iterator_tag);
template<typename FIter, typename UnaryPredicate>
FIter newton::partition(FIter first,
FIter last,
UnaryPredicate pred)
{
return newton::__partition(first, last, pred, std::__iterator_category(first));
}
Я вижу, что gcc, llmv и т. Д. Используют вторую версию, но ... Я читал, что компилятор использует первую функцию, которая подходит для его прототипа.
и разве Bidirectional Iter
не будет соответствовать Forward Iter
, а затем использовать эту функцию вместо специализированной?