- filesystem[meta header]
- std::filesystem[meta namespace]
- path[meta class]
- function template[meta id-type]
- cpp17[meta cpp]
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;
- quoted[link /reference/iomanip/quoted.md]
is
- この関数は、C++20で非メンバ関数から、friendメンバ関数に変更された。そのため、
std::filesystem::operator<<
という完全名の指定では呼び出せず、ADLによって呼び出すことになる
#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");
}
- p.native()[link native.md]
#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");
}
- p.native()[link native.md]
- C++17
- Clang:
- GCC: 8.1
- Visual C++: 2017 Update 7