30 Input/output library [input.output]

30.10 File systems [filesystems]

30.10.27 Class path [fs.class.path]

30.10.27.6 path non-member functions [fs.path.nonmember]

30.10.27.6.2 path factory functions [fs.path.factory]

template <class Source> path u8path(const Source& source); template <class InputIterator> path u8path(InputIterator first, InputIterator last);

Requires: Последовательности source и [first, last) кодируются в кодировке UTF-8. Тип значения Source и InputIterator есть char.

Returns:

  • Если value_­type есть, char а текущий native narrow encoding - UTF-8, вернуть path(source) или path(first, last); иначе,

  • если value_­type есть, wchar_­t а собственная широкая кодировка - UTF-16, или если value_­type есть, char16_­t или char32_­t, преобразовать source или [first, last) во временное, tmpтипа string_­type и возврата path(tmp); иначе,

  • преобразовать source или [first, last) во временное, tmpтипа u32string и возврата path(tmp).

Remarks: Argument format conversion применяется к аргументам этих функций. Как выполняется преобразование кодировки Unicode, не указано.

[ Example: Строка должна быть прочитана из базы данных, закодированной в UTF-8, и использована для создания каталога с использованием собственной кодировки для имен файлов:

namespace fs = std::filesystem;
std::string utf8_string = read_utf8_data();
fs::create_directory(fs::u8path(utf8_string));

Для операционных систем на основе POSIX с собственной узкой кодировкой, установленной на UTF-8, кодирование или преобразование типов не происходит.

Для операционных систем на основе POSIX, в которых для собственной узкой кодировки не задано значение UTF-8, происходит преобразование в UTF-32, за которым следует преобразование в текущую собственную узкую кодировку. Некоторые символы Unicode могут не иметь собственного представления набора символов.

Для операционных систем на базе Windows происходит преобразование из UTF-8 в UTF-16. ] end example