directory_entry
comparisons are membersSection: 31.12.10.4 [fs.dir.entry.obs] Status: NAD Submitter: Ville Voutilainen Opened: 2016-08-03 Last modified: 2017-03-19
Priority: 2
View all other issues in [fs.dir.entry.obs].
View all issues with NAD status.
Discussion:
The comparison operators for directory_entry
are member functions
(31.12.10.4 [fs.dir.entry.obs]).
directory_entry
can be compared with a path
,
but a path
cannot be compared with a directory_entry
, because
the left-hand side is not subject to conversions. This seems
unfortunate.
Note that the comparisons for path
are non-members (31.12.6.8 [fs.path.nonmember]).
The meta-p/r is to turn the directory_entry
comparisons into non-member functions.
[2016-08 Chicago]
Wed PM: Priority 2
[2016-10-05 Ville provides concrete wording]
[2016-10 Telecon]
This (comparing a path
with a directory_entry
) works today w/o any changes. Closing as NAD.
Proposed resolution:
This wording is relative to N4606.
In [fs.class.directory_entry] synopsis, edit as follows:
namespace std::filesystem { class directory_entry { public: […]bool operator< (const directory_entry& rhs) const noexcept; bool operator==(const directory_entry& rhs) const noexcept; bool operator!=(const directory_entry& rhs) const noexcept; bool operator<=(const directory_entry& rhs) const noexcept; bool operator> (const directory_entry& rhs) const noexcept; bool operator>=(const directory_entry& rhs) const noexcept;private: path pathobject; // exposition only }; bool operator< (const directory_entry& lhs, const directory_entry& rhs) noexcept; bool operator==(const directory_entry& lhs, const directory_entry& rhs) noexcept; bool operator!=(const directory_entry& lhs, const directory_entry& rhs) noexcept; bool operator<=(const directory_entry& lhs, const directory_entry& rhs) noexcept; bool operator> (const directory_entry& lhs, const directory_entry& rhs) noexcept; bool operator>=(const directory_entry& lhs, const directory_entry& rhs) noexcept; }
In 31.12.10.4 [fs.dir.entry.obs]/6-11, edit as follows:
bool operator==(const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-6- Returns:
.
pathobjectlhs.path() == rhs.pathobjectpath()bool operator!=(const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-7- Returns::
.
pathobjectlhs.path() != rhs.pathobjectpath()bool operator< (const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-8- Returns::
.
pathobjectlhs.path() < rhs.pathobjectpath()bool operator<<=(const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-9- Returns::
.
pathobjectlhs.path() <= rhs.pathobjectpath()bool operator> (const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-10- Returns::
.
pathobjectlhs.path() > rhs.pathobjectpath()bool operator>=(const directory_entry& lhs, const directory_entry& rhs)constnoexcept;-11- Returns::
.
pathobjectlhs.path() >= rhs.pathobjectpath()