diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2022-04-25 18:21:57 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2022-04-26 13:22:18 +0100 |
commit | e3c5e8360b4e4799e1e2daf74282629248690f23 (patch) | |
tree | c94078d6f0d97a5f3a344518eee9c7e49899c470 | |
parent | ad56a60f58c1ed662deaf60d5736c332ec2caabb (diff) | |
download | gcc-e3c5e8360b4e4799e1e2daf74282629248690f23.zip gcc-e3c5e8360b4e4799e1e2daf74282629248690f23.tar.gz gcc-e3c5e8360b4e4799e1e2daf74282629248690f23.tar.bz2 |
libstdc++: Define std::hash<std::filesystem::path> (LWG 3657)
This DR was approved at the February 2022 plenary.
libstdc++-v3/ChangeLog:
* include/bits/fs_path.h (hash<filesystem::path>): Define.
* testsuite/27_io/filesystem/path/nonmember/hash_value.cc:
Check std::hash specialization.
-rw-r--r-- | libstdc++-v3/include/bits/fs_path.h | 10 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc | 10 |
2 files changed, 20 insertions, 0 deletions
diff --git a/libstdc++-v3/include/bits/fs_path.h b/libstdc++-v3/include/bits/fs_path.h index 9e06fa6..d6202fd 100644 --- a/libstdc++-v3/include/bits/fs_path.h +++ b/libstdc++-v3/include/bits/fs_path.h @@ -1416,6 +1416,16 @@ extern template class __shared_ptr<const filesystem::filesystem_error::_Impl>; /// @endcond +// _GLIBCXX_RESOLVE_LIB_DEFECTS +// 3657. std::hash<std::filesystem::path> is not enabled +template<> + struct hash<filesystem::path> + { + size_t + operator()(const filesystem::path& __p) const noexcept + { return filesystem::hash_value(__p); } + }; + _GLIBCXX_END_NAMESPACE_VERSION } // namespace std diff --git a/libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc b/libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc index 6bc6296..0dcea6e 100644 --- a/libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc +++ b/libstdc++-v3/testsuite/27_io/filesystem/path/nonmember/hash_value.cc @@ -42,9 +42,19 @@ test02() } } +void +test03() +{ + std::hash<path> h; + // LWG 3657. std::hash<std::filesystem::path> is not enabled + for (const path p : __gnu_test::test_paths) + VERIFY( h(p) == hash_value(p) ); +} + int main() { test01(); test02(); + test03(); } |