mirror of
https://github.com/greg7mdp/parallel-hashmap.git
synced 2026-08-29 08:34:39 +08:00
Fix clang-15 warnings
This commit is contained in:
Vendored
+8
-15
@@ -60,6 +60,7 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
#include <new>
|
#include <new>
|
||||||
|
#include <type_traits>
|
||||||
|
|
||||||
#include "phmap_fwd_decl.h"
|
#include "phmap_fwd_decl.h"
|
||||||
#include "phmap_base.h"
|
#include "phmap_base.h"
|
||||||
@@ -76,14 +77,6 @@
|
|||||||
|
|
||||||
namespace phmap {
|
namespace phmap {
|
||||||
|
|
||||||
// Defined and documented later on in this file.
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_destructible;
|
|
||||||
|
|
||||||
// Defined and documented later on in this file.
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_move_assignable;
|
|
||||||
|
|
||||||
namespace type_traits_internal {
|
namespace type_traits_internal {
|
||||||
|
|
||||||
// Silence MSVC warnings about the destructor being defined as deleted.
|
// Silence MSVC warnings about the destructor being defined as deleted.
|
||||||
@@ -107,25 +100,25 @@ namespace phmap {
|
|||||||
: std::integral_constant<
|
: std::integral_constant<
|
||||||
bool, std::is_move_constructible<
|
bool, std::is_move_constructible<
|
||||||
type_traits_internal::SingleMemberUnion<T>>::value &&
|
type_traits_internal::SingleMemberUnion<T>>::value &&
|
||||||
phmap::is_trivially_destructible<T>::value> {};
|
std::is_trivially_destructible<T>::value> {};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct IsTriviallyCopyConstructibleObject
|
struct IsTriviallyCopyConstructibleObject
|
||||||
: std::integral_constant<
|
: std::integral_constant<
|
||||||
bool, std::is_copy_constructible<
|
bool, std::is_copy_constructible<
|
||||||
type_traits_internal::SingleMemberUnion<T>>::value &&
|
type_traits_internal::SingleMemberUnion<T>>::value &&
|
||||||
phmap::is_trivially_destructible<T>::value> {};
|
std::is_trivially_destructible<T>::value> {};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct IsTriviallyMoveAssignableReference : std::false_type {};
|
struct IsTriviallyMoveAssignableReference : std::false_type {};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct IsTriviallyMoveAssignableReference<T&>
|
struct IsTriviallyMoveAssignableReference<T&>
|
||||||
: phmap::is_trivially_move_assignable<T>::type {};
|
: std::is_trivially_move_assignable<T>::type {};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
struct IsTriviallyMoveAssignableReference<T&&>
|
struct IsTriviallyMoveAssignableReference<T&&>
|
||||||
: phmap::is_trivially_move_assignable<T>::type {};
|
: std::is_trivially_move_assignable<T>::type {};
|
||||||
|
|
||||||
} // namespace type_traits_internal
|
} // namespace type_traits_internal
|
||||||
|
|
||||||
@@ -155,10 +148,10 @@ namespace phmap {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
static constexpr bool kValue =
|
static constexpr bool kValue =
|
||||||
(__has_trivial_copy(ExtentsRemoved) || !kIsCopyOrMoveConstructible) &&
|
(std::is_trivially_copyable<ExtentsRemoved>::value || !kIsCopyOrMoveConstructible) &&
|
||||||
(__has_trivial_assign(ExtentsRemoved) || !kIsCopyOrMoveAssignable) &&
|
(std::is_trivially_copy_assignable<ExtentsRemoved>::value || !kIsCopyOrMoveAssignable) &&
|
||||||
(kIsCopyOrMoveConstructible || kIsCopyOrMoveAssignable) &&
|
(kIsCopyOrMoveConstructible || kIsCopyOrMoveAssignable) &&
|
||||||
is_trivially_destructible<ExtentsRemoved>::value &&
|
std::is_trivially_destructible<ExtentsRemoved>::value &&
|
||||||
// We need to check for this explicitly because otherwise we'll say
|
// We need to check for this explicitly because otherwise we'll say
|
||||||
// references are trivial copyable when compiled by MSVC.
|
// references are trivial copyable when compiled by MSVC.
|
||||||
!std::is_reference<ExtentsRemoved>::value;
|
!std::is_reference<ExtentsRemoved>::value;
|
||||||
|
|||||||
Vendored
+4
-26
@@ -223,29 +223,6 @@ struct disjunction<> : std::false_type {};
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
struct negation : std::integral_constant<bool, !T::value> {};
|
struct negation : std::integral_constant<bool, !T::value> {};
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_destructible
|
|
||||||
: std::integral_constant<bool, __has_trivial_destructor(T) &&
|
|
||||||
std::is_destructible<T>::value> {};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_default_constructible
|
|
||||||
: std::integral_constant<bool, __has_trivial_constructor(T) &&
|
|
||||||
std::is_default_constructible<T>::value &&
|
|
||||||
is_trivially_destructible<T>::value> {};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_copy_constructible
|
|
||||||
: std::integral_constant<bool, __has_trivial_copy(T) &&
|
|
||||||
std::is_copy_constructible<T>::value &&
|
|
||||||
is_trivially_destructible<T>::value> {};
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct is_trivially_copy_assignable
|
|
||||||
: std::integral_constant<
|
|
||||||
bool, __has_trivial_assign(typename std::remove_reference<T>::type) &&
|
|
||||||
phmap::is_copy_assignable<T>::value> {};
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// C++14 "_t" trait aliases
|
// C++14 "_t" trait aliases
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
@@ -1808,9 +1785,10 @@ protected:
|
|||||||
// Also, we should be checking is_trivially_copyable here, which is not
|
// Also, we should be checking is_trivially_copyable here, which is not
|
||||||
// supported now, so we use is_trivially_* traits instead.
|
// supported now, so we use is_trivially_* traits instead.
|
||||||
template <typename T,
|
template <typename T,
|
||||||
bool unused = phmap::is_trivially_copy_constructible<T>::value&&
|
bool unused =
|
||||||
phmap::is_trivially_copy_assignable<typename std::remove_cv<
|
std::is_trivially_copy_constructible<T>::value &&
|
||||||
T>::type>::value&& std::is_trivially_destructible<T>::value>
|
std::is_trivially_copy_assignable<typename std::remove_cv<T>::type>::value &&
|
||||||
|
std::is_trivially_destructible<T>::value>
|
||||||
class optional_data;
|
class optional_data;
|
||||||
|
|
||||||
// Trivially copyable types
|
// Trivially copyable types
|
||||||
|
|||||||
Vendored
-27
@@ -148,33 +148,6 @@
|
|||||||
#define PHMAP_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) 0
|
#define PHMAP_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------
|
|
||||||
// Checks whether `std::is_trivially_destructible<T>` is supported.
|
|
||||||
// ----------------------------------------------------------------
|
|
||||||
#ifdef PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE
|
|
||||||
#error PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE cannot be directly set
|
|
||||||
#elif defined(_LIBCPP_VERSION) || defined(_MSC_VER) || \
|
|
||||||
(!defined(__clang__) && defined(__GNUC__) && defined(__GLIBCXX__) && PHMAP_INTERNAL_HAVE_MIN_GNUC_VERSION(4, 8))
|
|
||||||
#define PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
// Checks whether `std::is_trivially_default_constructible<T>` is
|
|
||||||
// supported.
|
|
||||||
// --------------------------------------------------------------
|
|
||||||
#if defined(PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE)
|
|
||||||
#error PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE cannot be directly set
|
|
||||||
#elif defined(PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE)
|
|
||||||
#error PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE cannot directly set
|
|
||||||
#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) || \
|
|
||||||
(!defined(__clang__) && defined(__GNUC__) && \
|
|
||||||
PHMAP_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 1) && \
|
|
||||||
(defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) || \
|
|
||||||
(defined(_MSC_VER) && !defined(__NVCC__))
|
|
||||||
#define PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE 1
|
|
||||||
#define PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Checks whether C++11's `thread_local` storage duration specifier is
|
// Checks whether C++11's `thread_local` storage duration specifier is
|
||||||
// supported.
|
// supported.
|
||||||
|
|||||||
+1
-1
@@ -418,7 +418,7 @@ namespace {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <typename T, typename V>
|
template <typename T, typename V>
|
||||||
void DoTest(const char *name, T *b, const std::vector<V> &values) {
|
void DoTest(const char *, T *b, const std::vector<V> &values) {
|
||||||
typename KeyOfValue<typename T::key_type, V>::type key_of_value;
|
typename KeyOfValue<typename T::key_type, V>::type key_of_value;
|
||||||
|
|
||||||
T &mutable_b = *b;
|
T &mutable_b = *b;
|
||||||
|
|||||||
Reference in New Issue
Block a user