diff options
Diffstat (limited to 'chromium/base/memory')
-rw-r--r-- | chromium/base/memory/raw_ptr.h | 31 | ||||
-rw-r--r-- | chromium/base/memory/raw_scoped_refptr_mismatch_checker.h | 5 |
2 files changed, 34 insertions, 2 deletions
diff --git a/chromium/base/memory/raw_ptr.h b/chromium/base/memory/raw_ptr.h index 4d978e97986..639713cd619 100644 --- a/chromium/base/memory/raw_ptr.h +++ b/chromium/base/memory/raw_ptr.h @@ -1051,6 +1051,37 @@ ALWAYS_INLINE bool operator>=(const raw_ptr<U, I>& lhs, return lhs.GetForComparison() >= rhs.GetForComparison(); } +// Template helpers for working with T* or raw_ptr<T>. +template <typename T> +struct IsPointer : std::false_type {}; + +template <typename T> +struct IsPointer<T*> : std::true_type {}; + +template <typename T, typename I> +struct IsPointer<raw_ptr<T, I>> : std::true_type {}; + +template <typename T> +inline constexpr bool IsPointerV = IsPointer<T>::value; + +template <typename T> +struct RemovePointer { + using type = T; +}; + +template <typename T> +struct RemovePointer<T*> { + using type = T; +}; + +template <typename T, typename I> +struct RemovePointer<raw_ptr<T, I>> { + using type = T; +}; + +template <typename T> +using RemovePointerT = typename RemovePointer<T>::type; + } // namespace base using base::raw_ptr; diff --git a/chromium/base/memory/raw_scoped_refptr_mismatch_checker.h b/chromium/base/memory/raw_scoped_refptr_mismatch_checker.h index 9e50458ec98..7afae066fa3 100644 --- a/chromium/base/memory/raw_scoped_refptr_mismatch_checker.h +++ b/chromium/base/memory/raw_scoped_refptr_mismatch_checker.h @@ -7,6 +7,7 @@ #include <type_traits> +#include "base/memory/raw_ptr.h" #include "base/template_util.h" // It is dangerous to post a task with a T* argument where T is a subtype of @@ -35,8 +36,8 @@ struct IsRefCountedType<T, // pointer type and are convertible to a RefCounted(Base|ThreadSafeBase) type. template <typename T> struct NeedsScopedRefptrButGetsRawPtr - : conjunction<std::is_pointer<T>, - IsRefCountedType<std::remove_pointer_t<T>>> { + : conjunction<base::IsPointer<T>, + IsRefCountedType<base::RemovePointerT<T>>> { static_assert(!std::is_reference<T>::value, "NeedsScopedRefptrButGetsRawPtr requires non-reference type."); }; |