Как автоматически вывести параметр шаблона для параметра функции типа basic_string_view или подобного?

Следующее не работает:

template<class charT, class traits = std::char_traits<charT> >
void f(std::basic_string_view<charT, traits> sv) {

}

int main(){
    std::basic_string_view sv = "no";//ok
    std::basic_string_view svw = L"shit";//ok

    f("sherlock");//not ok
}

Я хочу использовать руководство по дедукции (неявное или иное) basic_string_view в функции f. Как такое возможно?

1 ответ

Это невозможно напрямую в сочетании с выводом аргумента функции. Однако это возможно, просто переадресовав вместо этого:

template<class T>
void f(T&& str) {
   std::basic_string_view sv = str;//using deduction guide here
   using CharT = decltype(sv)::value_type;
}

Так что внутри функции нет проблем.

Другие вопросы по тегам