Информация об изменениях

Сообщение Re[5]: ненависть к итераторам от 26.12.2020 14:31

Изменено 26.12.2020 14:48 rg45

Re[5]: ненависть к итераторам
Здравствуйте, Videoman, Вы писали:


V>Да придирки... просто насколько я понял std::iterator_traits не отличает константные итераторы от не константных. Как с std::iterator_traits сделать что-бы метод принимал итераторы/указатели только не константные, иначе говоря, что бы код выше не компилировался, а вот такой компилировался?


Константный и неконстантный итераторы имеют одинаковый value_type, но разные reference. Так что все в твоих руках.
Re[5]: ненависть к итераторам
Здравствуйте, Videoman, Вы писали:


V>Да придирки... просто насколько я понял std::iterator_traits не отличает константные итераторы от не константных. Как с std::iterator_traits сделать что-бы метод принимал итераторы/указатели только не константные, иначе говоря, что бы код выше не компилировался, а вот такой компилировался?


Константный и неконстантный итераторы имеют одинаковый value_type, но разные reference. Так что все в твоих руках. Вот так, например:

template <typename It>
using is_nonconst_iterator = std::is_same<
  typename std::iterator_traits<It>::reference, 
  typename std::iterator_traits<It>::value_type&>;


template<typename It, std::enable_if_t<is_nonconst_iterator<It>::value, int> = 0>
constexpr uint_t CalcSomething(It beg, It end);