- filesystem[meta header]
- std::filesystem[meta namespace]
- function template[meta id-type]
- cpp17[meta cpp]
- cpp20deprecated[meta cpp]
namespace std::filesystem {
template <class Source>
path u8path(const Source& source); // (1)
template <class InputIterator>
path u8path(InputIterator first, InputIterator last); // (2)
}
- path[link path.md]
この関数は、C++20で非推奨となった。UTF-8エンコードされたパス文字列はchar8_t
型文字列としてpath
クラスのコンストラクタに、指定すること。
UTF-8エンコードされた文字列からパスオブジェクトを構築する。
- (1) : UTF-8エンコードされた
char
配列、std::string
、std::string_view
オブジェクトからパスオブジェクトを構築する - (2) : UTF-8エンコードされた
char
要素の範囲から、パスオブジェクトを構築する
source
および文字範囲[first, last)
がUTF-8エンコードされていること- 文字列の要素となる文字型が
char
であること
path
クラスのvalue_type
がchar
であれば (POSIX)、文字コード変換せずにpath
オブジェクトを構築して返す- そうでなければ、OSのファイルシステムが扱う文字コードに変換し (WindowsならUTF-16)、
path
オブジェクトを構築して返す
C++20ではUTF-8エンコードされた文字にはchar8_t
が型付けられ、char
型とオーバーロードできるようになった。path
クラスのコンストラクタにchar8_t
版のオーバーロードが追加されたため、この関数は不要になった。
#include <fstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
// (1)
{
fs::path p = fs::u8path(u8"a/b/c");
std::ofstream file{p};
}
// (2)
{
std::string raw_path = u8"a/b/c";
fs::path p = fs::u8path(raw_path.begin(), raw_path.end());
std::ofstream file{p};
}
}
- fs::u8path[color ff0000]
- raw_path.begin()[link /reference/string/basic_string/begin.md]
- raw_path.end()[link /reference/string/basic_string/end.md]
- C++17
- Clang, C++17 mode: 7.0
- GCC, C++17 mode: 8.1
- Visual C++: