list_pro::const_iterator нет типа iterator_category, но он там есть как using iterator_category = std::forward_iterator. ЧЯДНТ?
А скиньте сообщение об ошибке, чтобы мы не гадали, что там у вас происходит, в какой строчке и каком файле
Справедливо: /home/eugene/gits/list_examples/list_pro.hpp:241:9: required from ‘pro::list<T, Alloc>::list(const pro::list<T, Alloc>&) [with T = long unsigned int; Alloc = std::allocator<long unsigned int>]’ /home/eugene/gits/list_examples/main.cpp:35:10: required from ‘void test_list(size_t) [with List = pro::list<long unsigned int>; size_t = long unsigned int]’ /home/eugene/gits/list_examples/main.cpp:55:38: required from here /usr/include/c++/10/bits/stl_algobase.h:465:64: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<pro::list<long unsigned int>::const_iterator>’ 465 | typedef typename iterator_traits<_II>::iterator_category _Category;
Как интересно... а другой компилятор пробовали? так же ругается?
iterator_category нет в std::iterator_traits<list_pro::const_iterator>, а не в самом итераторе Вот тут есть про то, как итератор выглядеть должен
Ответ в "If Iter does not have all five member types difference_type, value_type, pointer, reference, and iterator_category, then this template has no members by any of those names (std::iterator_traits is SFINAE-friendly)" То есть надо в каждом итераторе дописать недостающие using, иначе iterator_traits не будут их находить
Обсуждают сегодня