diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-05-25 16:11:11 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-05-31 15:21:02 +0200 |
commit | 9d30f04f8fb16643b470248b252654846a7126f7 (patch) | |
tree | a0d216e17a88bcf0f1f44340dfeca92e53e1d433 /src/utils/cpp/path_hash.hpp | |
parent | 26e7149fe8cc1be820ab35ebb6b92a683f9809bb (diff) | |
download | justbuild-9d30f04f8fb16643b470248b252654846a7126f7.tar.gz |
utils: Relocate the std::filesystem::hash_value libc fix...
...and make the use of std::hash consistent.
This will make it easier to remove the fix once the libc
implementation we use catches up with the C++ standard.
Diffstat (limited to 'src/utils/cpp/path_hash.hpp')
-rw-r--r-- | src/utils/cpp/path_hash.hpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/utils/cpp/path_hash.hpp b/src/utils/cpp/path_hash.hpp new file mode 100644 index 00000000..b990161c --- /dev/null +++ b/src/utils/cpp/path_hash.hpp @@ -0,0 +1,36 @@ +// Copyright 2023 Huawei Cloud Computing Technology Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP +#define INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP + +#include <filesystem> + +#if (defined(__GLIBCXX__) and _GLIBCXX_RELEASE < 12) or \ + (defined(_LIBCPP_VERSION) and _LIBCPP_VERSION < 16000) +// std::hash<std::filesystem::path> is missing for +// - GNU's libstdc++ < 12 +// - LLVM's libcxx < 16 (see https://reviews.llvm.org/D125394) +namespace std { +template <> +struct hash<std::filesystem::path> { + [[nodiscard]] auto operator()( + std::filesystem::path const& ct) const noexcept -> std::size_t { + return std::filesystem::hash_value(ct); + } +}; +} // namespace std +#endif + +#endif // INCLUDED_SRC_UTILS_CPP_PATH_HASH_HPP |