В дополнение к требованиям ([fs.req]), указанные параметры шаблона функции Source должны быть одним из следующих:
basic_string<EcharT, traits, Allocator>. Аргумент функции const Source& source должен иметь эффективный диапазон [source.begin(), source.end()).
basic_string_view<EcharT, traits>. Аргумент функции const Source& source должен иметь эффективный диапазон [source.begin(), source.end()).
Тип, отвечающий требованиям итератора ввода, который выполняет итерацию по NTCTS. Тип значения должен быть типом закодированного символа. Аргумент функции const Source& source должен иметь эффективный диапазон, [source, end) где end - первое значение итератора со значением элемента, равным iterator_traits<Source>::value_type().
Символьный массив, который после преобразования массива в указатель приводит к указателю на начало NTCTS. Тип значения должен быть типом закодированного символа. Аргумент функции const Source& source должен иметь эффективный диапазон, [source, end) где end - первое значение итератора со значением элемента, равным iterator_traits<decay_t<Source>>::value_type().
Функции, принимающие указанные параметры шаблона Source , не должны участвовать в разрешении перегрузки, если либо
Source является специализацией basic_string или basic_string_view, или
qualified-id iterator_traits<decay_t<Source>>::value_type является действительным , и обозначает , возможно , const закодированный тип символов ([temp.deduct]).
[ Note: Посмотрите, path conversions как указанные выше типы значений и их кодировки преобразуются в path::value_type и его кодировку. ] — end note