diff options
Diffstat (limited to 'runtime/obj_ptr.h')
-rw-r--r-- | runtime/obj_ptr.h | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/runtime/obj_ptr.h b/runtime/obj_ptr.h index d24c6fbd2c..2da2ae5650 100644 --- a/runtime/obj_ptr.h +++ b/runtime/obj_ptr.h @@ -51,27 +51,24 @@ class ObjPtr { REQUIRES_SHARED(Locks::mutator_lock_) : reference_(0u) {} - template <typename Type> + template <typename Type, + typename = typename std::enable_if<std::is_base_of<MirrorType, Type>::value>::type> ALWAYS_INLINE ObjPtr(Type* ptr) // NOLINT REQUIRES_SHARED(Locks::mutator_lock_) : reference_(Encode(static_cast<MirrorType*>(ptr))) { - static_assert(std::is_base_of<MirrorType, Type>::value, - "Input type must be a subtype of the ObjPtr type"); } - template <typename Type> + template <typename Type, + typename = typename std::enable_if<std::is_base_of<MirrorType, Type>::value>::type> ALWAYS_INLINE ObjPtr(const ObjPtr<Type, kPoison>& other) // NOLINT REQUIRES_SHARED(Locks::mutator_lock_) : reference_(Encode(static_cast<MirrorType*>(other.Ptr()))) { - static_assert(std::is_base_of<MirrorType, Type>::value, - "Input type must be a subtype of the ObjPtr type"); } - template <typename Type> + template <typename Type, + typename = typename std::enable_if<std::is_base_of<MirrorType, Type>::value>::type> ALWAYS_INLINE ObjPtr& operator=(const ObjPtr<Type, kPoison>& other) REQUIRES_SHARED(Locks::mutator_lock_) { - static_assert(std::is_base_of<MirrorType, Type>::value, - "Input type must be a subtype of the ObjPtr type"); reference_ = Encode(static_cast<MirrorType*>(other.Ptr())); return *this; } |