namespace std::filesystem {
template <class CharT, class Traits>
std::basic_istream<CharT, Traits>&
operator>>(std::basic_istream<CharT, Traits>& is, path& p); // (1) C++17
}
template <class CharT, class Traits>
friend std::basic_istream<CharT, Traits>&
operator>>(std::basic_istream<CharT, Traits>& is, path& p); // (2) C++20
概要
ストリームから入力する。
path
オブジェクトにおいては、パス文字列が入力されること。
- 入力されるパス文字列のフォーマットは、システムフォーマットでも、システム非依存フォーマットどちらでも受け入れられる
- 入力されるパス文字列は、ダブルクォーテーション囲みされていても、されていなくても、どちらでも受け入れられる
効果
以下と等価:
std::basic_string<CharT, Traits> tmp;
is >> quoted(tmp);
p = tmp;
戻り値
is
備考
- この関数は、C++20で非メンバ関数から、friendメンバ関数に変更された。そのため、
std::filesystem::operator<<
という完全名の指定では呼び出せず、ADLによって呼び出すことになる
例
POSIXベースシステムでの例
#include <cassert>
#include <sstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
std::istringstream ss {"\"a/b/c\""};
fs::path p;
ss >> p;
assert(p.native() == "a/b/c");
}
出力
Windowsでの例
#include <cassert>
#include <sstream>
#include <filesystem>
namespace fs = std::filesystem;
int main()
{
std::istringstream ss {"\"a/b/c\""};
fs::path p;
ss >> p;
assert(p.native() == L"a/b/c");
}
出力
バージョン
言語
- C++17
処理系
- Clang:
- GCC: 8.1 ✅
- Visual C++: 2017 Update 7 ✅