Здравствуйте, Videoman, Вы писали:
V>У меня закралось сомнение что я не стой стороны подхожу, но я не понял твоей идеи. т.е. будет срабатывать для всех типов имеющих размер 1,2,4. Если это так, то это совсем не то что мен нужно. Мне нужно только для char, char16_t, char32_t, wchar_t (для совместимости со старым кодом)
Ну тогда просто слегка допилить фильтр. Но общим остается то, что отдельная версия для wchar_t не нужна — whar_t должен автоматом подхватываться одной из трех других версий:
template<typename It, typename T>
using is_iterator_compatible = std::integral_constant<bool,
std::is_same_v<T, typename std::iterator_traits<It>::value_type> ||
(std::is_same_v<wchar_t, typename std::iterator_traits<It>::value_type> && sizeof(T) == sizeof(wchar_t))
>;
template<typename It, std::enable_if_t<is_iterator_compatible<It, char>::value, int> = 0>
constexpr uint_t CalcSomething(It beg, It end) // ...
template<typename It, std::enable_if_t<is_iterator_compatible<It, char16_t>::value, int> = 0>
constexpr uint_t CalcSomething(It beg, It end) // ...
template<typename It, std::enable_if_t<is_iterator_compatible<It, char32_t>::value, int> = 0>
constexpr uint_t CalcSomething(It beg, It end) // ...