Chromium Code Reviews| Index: Source/wtf/PassRefPtr.h |
| diff --git a/Source/wtf/PassRefPtr.h b/Source/wtf/PassRefPtr.h |
| index 46417573a17d5124bfcd0ebe55442edbb8c9f761..1de5e338a28708005a8d93b8835d12ecb258e936 100644 |
| --- a/Source/wtf/PassRefPtr.h |
| +++ b/Source/wtf/PassRefPtr.h |
| @@ -25,6 +25,11 @@ |
| #include "wtf/NullPtr.h" |
| #include "wtf/TypeTraits.h" |
| +#define EnsureRefPtrConvertibleArgDefn \ |
|
Nico
2013/08/29 19:58:47
This is identical to EnsureOwnArrayPtrConvertibleA
|
| + typename EnableIf<IsPointerConvertible<U, T>::Value, bool>::Type |
| +#define EnsureRefPtrConvertibleArgDecl \ |
| + EnsureRefPtrConvertibleArgDefn = true |
| + |
| namespace WTF { |
| template<typename T> class RefPtr; |
| @@ -53,11 +58,11 @@ namespace WTF { |
| // a const PassRefPtr. However, it makes it much easier to work with PassRefPtr |
| // temporaries, and we don't have a need to use real const PassRefPtrs anyway. |
| PassRefPtr(const PassRefPtr& o) : m_ptr(o.leakRef()) { } |
| - template<typename U> PassRefPtr(const PassRefPtr<U>& o, EnsurePtrConvertibleArgDecl(U, T)) : m_ptr(o.leakRef()) { } |
| + template<typename U> PassRefPtr(const PassRefPtr<U>& o, EnsureRefPtrConvertibleArgDecl) : m_ptr(o.leakRef()) { } |
| ALWAYS_INLINE ~PassRefPtr() { derefIfNotNull(m_ptr); } |
| - template<typename U> PassRefPtr(const RefPtr<U>&, EnsurePtrConvertibleArgDecl(U, T)); |
| + template<typename U> PassRefPtr(const RefPtr<U>&, EnsureRefPtrConvertibleArgDecl); |
| T* get() const { return m_ptr; } |
| @@ -83,7 +88,7 @@ namespace WTF { |
| mutable T* m_ptr; |
| }; |
| - template<typename T> template<typename U> inline PassRefPtr<T>::PassRefPtr(const RefPtr<U>& o, EnsurePtrConvertibleArgDefn(U, T)) |
| + template<typename T> template<typename U> inline PassRefPtr<T>::PassRefPtr(const RefPtr<U>& o, EnsureRefPtrConvertibleArgDefn) |
| : m_ptr(o.get()) |
| { |
| T* ptr = m_ptr; |