29 Input/output library [input.output]

29.11 File systems [filesystems]

29.11.7 Class path [fs.class.path]

29.11.7.7 Non-member functions [fs.path.nonmember]

void swap(path& lhs, path& rhs) noexcept;
Effects: Equivalent to lhs.swap(rhs).
size_t hash_value (const path& p) noexcept;
Returns: A hash value for the path p.
If for two paths, p1 == p2 then hash_­value(p1) == hash_­value(p2).
friend bool operator==(const path& lhs, const path& rhs) noexcept;
Returns: !(lhs < rhs) && !(rhs < lhs).
[ Note
:
Path equality and path equivalence have different semantics.
  • Equality is determined by the path non-member operator==, which considers the two paths' lexical representations only.
    [ Example
    : path("foo") == "bar" is never true. — end example
     ]
  • Equivalence is determined by the equivalent() non-member function, which determines if two paths resolve ([fs.class.path]) to the same file system entity.
    [ Example
    : equivalent("foo", "bar") will be true when both paths resolve to the same file. — end example
     ]
Programmers wishing to determine if two paths are β€œthe same” must decide if β€œthe same” means β€œthe same representation” or β€œresolve to the same actual file”, and choose the appropriate function accordingly.
— end note
 ]
friend bool operator!=(const path& lhs, const path& rhs) noexcept;
Returns: !(lhs == rhs).
friend bool operator< (const path& lhs, const path& rhs) noexcept;
Returns: lhs.compare(rhs) < 0.
friend bool operator<=(const path& lhs, const path& rhs) noexcept;
Returns: !(rhs < lhs).
friend bool operator> (const path& lhs, const path& rhs) noexcept;
Returns: rhs < lhs.
friend bool operator>=(const path& lhs, const path& rhs) noexcept;
Returns: !(lhs < rhs).
friend path operator/ (const path& lhs, const path& rhs);
Effects: Equivalent to: return path(lhs) /= rhs;