Difference between revisions of "cpp/filesystem/path/operator cmp"
D41D8CD98F (Talk | contribs) (+ note synthesized compare) |
m (→Notes: fmt: equivalent() -> filesystem::equivalent()) |
||
Line 62: | Line 62: | ||
In the case of equality, as determined by {{tt|operator{{==}}}}, only lexical representations are compared. Therefore, {{c|1=path("a") == path("b")}} is never {{c|true}}. | In the case of equality, as determined by {{tt|operator{{==}}}}, only lexical representations are compared. Therefore, {{c|1=path("a") == path("b")}} is never {{c|true}}. | ||
− | In the case of equivalence, as determined by {{ltf|cpp/filesystem/equivalent}}, it is checked whether two paths ''resolve'' to the same file system object. Thus {{c|equivalent("a", "b")}} will return {{c|true}} if the paths resolve to the same file. | + | In the case of equivalence, as determined by {{ltf|cpp/filesystem/equivalent}}, it is checked whether two paths ''resolve'' to the same file system object. Thus {{c|equivalent("a", "b")}} will return {{c|true}} if the paths resolve to the same file. |
===Defect reports=== | ===Defect reports=== |
Revision as of 07:28, 2 June 2021
friend bool operator==( const path& lhs, const path& rhs ) noexcept; |
(1) | (since C++17) |
friend bool operator!=( const path& lhs, const path& rhs ) noexcept; |
(2) | (since C++17) (until C++20) |
friend bool operator<( const path& lhs, const path& rhs ) noexcept; |
(3) | (since C++17) (until C++20) |
friend bool operator<=( const path& lhs, const path& rhs ) noexcept; |
(4) | (since C++17) (until C++20) |
friend bool operator>( const path& lhs, const path& rhs ) noexcept; |
(5) | (since C++17) (until C++20) |
friend bool operator>=( const path& lhs, const path& rhs ) noexcept; |
(6) | (since C++17) (until C++20) |
friend std::strong_ordering operator<=>( const path& lhs, const path& rhs ) noexcept; |
(7) | (since C++20) |
Compares two paths lexicographically.
lhs
and rhs
are equal. Equivalent to !(lhs < rhs) && !(rhs < lhs).lhs
and rhs
are not equal. Equivalent to !(lhs == rhs).lhs
is less than rhs
. Equivalent to lhs.compare(rhs) < 0.lhs
is less than or equal to rhs
. Equivalent to !(rhs < lhs).lhs
is greater than rhs
. Equivalent to rhs < lhs.lhs
is greater than or equal to rhs
. Equivalent to !(lhs < rhs).lhs
and rhs
. Equivalent to lhs.compare(rhs) <=> 0.These functions are not visible to ordinary unqualified or qualified lookup, and can only be found by argument-dependent lookup when std::filesystem::path is an associated class of the arguments. This prevents undesirable conversions in the presence of a using namespace std::filesystem; using-directive.
The |
(since C++20) |
Contents |
Parameters
lhs, rhs | - | the paths to compare |
Return value
lhs
is less than rhs
, otherwise std::strong_ordering::greater if rhs
is less than lhs
, otherwise std::strong_ordering::equal.Notes
Path equality and equivalence have different semantics.
In the case of equality, as determined by operator==
, only lexical representations are compared. Therefore, path("a") == path("b") is never true.
In the case of equivalence, as determined by filesystem::equivalent(), it is checked whether two paths resolve to the same file system object. Thus equivalent("a", "b") will return true if the paths resolve to the same file.
Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 3065 | C++17 | allowed comparison of everything convertible to path in the presence of a using-directive
|
made hidden friend |
See also
compares the lexical representations of two paths lexicographically (public member function) |