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
};
}
概要
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);
}
出力
バージョン
言語
- C++17
処理系
- Clang: 7.0 ✅
- GCC: 8.1 ✅
- Visual C++:
参照
- LWG Issue 3719. Directory iterators should be usable with default sentinel
- C++23で、
default_sentinel_tとの等値比較演算子(2)が追加された
- C++23で、