- filesystem[meta header]
- std::filesystem[meta namespace]
- function[meta id-type]
- cpp17[meta cpp]
namespace std::filesystem {
bool operator==(const directory_iterator& a, const directory_iterator& b) noexcept; // (1) C++17
class directory_iterator {
public:
bool operator==(default_sentinel_t) const noexcept; // (2) C++23
};
}- default_sentinel_t[link /reference/iterator/default_sentinel_t.md]
directory_iteratorオブジェクトが等値かを判定する。
- (1) : 2つの
directory_iteratorオブジェクトを等値比較する。 - (2) :
directory_iteratorオブジェクトが終端(ディレクトリの末尾)に到達しているかを判定する。
- (1) : 2つの
directory_iteratorオブジェクトが等値である場合はtrue、そうでなければfalseを返す。 - (2) :
*this == directory_iterator()と等価。すなわち、イテレータが終端を指していればtrue、そうでなければfalseを返す。
#include <cassert>
#include <filesystem>
#include <fstream>
#include <iterator>
namespace fs = std::filesystem;
int main()
{
fs::create_directory("dir");
std::ofstream{"dir/a.txt"};
fs::directory_iterator a{"dir"};
fs::directory_iterator b = a;
// (1) 2つのイテレータの等値比較
assert(a == b);
++b;
// (1) デフォルト構築したイテレータ(終端)との比較
fs::directory_iterator end{};
assert(b == end);
// (2) default_sentinelとの比較で終端を判定する (C++23)
assert(b == std::default_sentinel);
}- fs::create_directory[link /reference/filesystem/create_directory.md]
- std::default_sentinel[link /reference/iterator/default_sentinel.md.nolink]
- C++17
- Clang: 7.0 [mark verified]
- GCC: 8.1 [mark verified]
- Visual C++:
- LWG Issue 3719. Directory iterators should be usable with default sentinel
- C++23で、
default_sentinel_tとの等値比較演算子(2)が追加された
- C++23で、