#include <iterator>
#include <forward_list>
#include <string>
#include <vector>
using namespace std;
template<typename C>
using Iterator_type = typename C::iterator;
template<typename Iter>
using Iterator_category = typename iterator_traits<Iter>::iterator_category;
template<typename Ran>
void sort_helper(Ran beg, Ran end, random_access_iterator_tag){
sort(beg,end);
}
template<typename For>
void sort_helper(For beg, For end, forward_iterator_tag){
vector<decltype(*beg)> vc{beg, end};
sort(vc.begin(),vc.end());
copy(vc.begin(),vc.end(),beg);
}
template<typename C>
void sort(C& c){
using Iter = Iterator_type<C>;
sort_helper(c.begin(),c.end(),Iterator_category<Iter>{});
}
void test(vector<string>& vs, forward_list<double>& lls){
sort(vs);
sort(lls);
}
Я получаю ошибку компиляции - формовка указатель на ссылку типа двойной &возникают ошибки при отправке тегов
Код с Бьярне Страуструп - язык программирования C++ 5.4.2.1 iterator_traits
[MCVE] чувак, погрешности дословно! –
Вы проверили ошибки? http://www.stroustrup.com/4th.html –