Здравствуйте, Videoman, Вы писали:
V>Вопрос:
V>Где как можно выйти в такой ситуации. Вроде задача элементарная, но времени отняла уже прилично. Так и чувствую себя как ослик бегущий за морковкой, ногу вытащишь, хвост увязнет и т.д.
Ну, например, если ничего не упустил, как-то так (
https://ideone.com/m8igyh ):
template <typename Iter>
using iter_val_t = typename std::iterator_traits< Iter >::value_type;
template <typename Iter, typename T>
constexpr bool is_T_iter_v = std::is_same< iter_val_t< Iter >, T >::value;
template <typename Iter>
constexpr bool is_wchar_iter_v = std::is_same< iter_val_t< Iter >, wchar_t >::value;
template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char >, int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
std::cout << "i'm char\n";
}
template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char16_t > ||
( is_wchar_iter_v< Iter > && sizeof( wchar_t ) == sizeof( char16_t ) ), int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
std::cout << "i'm char16\n";
}
template <typename Iter, std::enable_if_t < is_T_iter_v< Iter, char32_t > ||
( is_wchar_iter_v< Iter > && sizeof( wchar_t ) == sizeof( char32_t ) ), int > = 0 >
void CalcSomething( Iter begin, Iter end )
{
std::cout << "i'm char32\n";
}