From 9d30f04f8fb16643b470248b252654846a7126f7 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 25 May 2023 16:11:11 +0200 Subject: 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. --- src/utils/cpp/path_hash.hpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/utils/cpp/path_hash.hpp (limited to 'src/utils/cpp/path_hash.hpp') 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 + +#if (defined(__GLIBCXX__) and _GLIBCXX_RELEASE < 12) or \ + (defined(_LIBCPP_VERSION) and _LIBCPP_VERSION < 16000) +// std::hash is missing for +// - GNU's libstdc++ < 12 +// - LLVM's libcxx < 16 (see https://reviews.llvm.org/D125394) +namespace std { +template <> +struct hash { + [[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 -- cgit v1.2.3