最終更新日時(UTC):
が更新

履歴 編集

function template
<filesystem>

std::filesystem::path::operator>>(C++17)

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

処理系

参照