| Index: base/memory/ref_counted.h
 | 
| diff --git a/base/memory/ref_counted.h b/base/memory/ref_counted.h
 | 
| index 96329cb1f49954adb375d82617019ee067f76c30..5102ed8d2823f16f0b701fbc7250f1398724a61e 100644
 | 
| --- a/base/memory/ref_counted.h
 | 
| +++ b/base/memory/ref_counted.h
 | 
| @@ -15,6 +15,10 @@
 | 
|  #endif
 | 
|  #include "base/threading/thread_collision_warner.h"
 | 
|  
 | 
| +#if defined(OS_LINUX)
 | 
| +#define DISABLE_SCOPED_REFPTR_CONVERSION_OPERATOR
 | 
| +#endif
 | 
| +
 | 
|  namespace base {
 | 
|  
 | 
|  namespace subtle {
 | 
| @@ -291,9 +295,11 @@ class scoped_refptr {
 | 
|  
 | 
|    T* get() const { return ptr_; }
 | 
|  
 | 
| +#if !defined(DISABLE_SCOPED_REFPTR_CONVERSION_OPERATOR)
 | 
|    // Allow scoped_refptr<C> to be used in boolean expression
 | 
|    // and comparison operations.
 | 
|    operator T*() const { return ptr_; }
 | 
| +#endif
 | 
|  
 | 
|    T& operator*() const {
 | 
|      assert(ptr_ != NULL);
 | 
| @@ -335,6 +341,23 @@ class scoped_refptr {
 | 
|      swap(&r.ptr_);
 | 
|    }
 | 
|  
 | 
| +#if defined(DISABLE_SCOPED_REFPTR_CONVERSION_OPERATOR)
 | 
| +  template <typename U>
 | 
| +  bool operator==(const scoped_refptr<U>& rhs) const {
 | 
| +    return ptr_ == rhs.get();
 | 
| +  }
 | 
| +
 | 
| +  template <typename U>
 | 
| +  bool operator!=(const scoped_refptr<U>& rhs) const {
 | 
| +    return !operator==(rhs);
 | 
| +  }
 | 
| +
 | 
| +  template <typename U>
 | 
| +  bool operator<(const scoped_refptr<U>& rhs) const {
 | 
| +    return ptr_ < rhs.get();
 | 
| +  }
 | 
| +#endif
 | 
| +
 | 
|   protected:
 | 
|    T* ptr_;
 | 
|  };
 | 
| @@ -346,4 +369,32 @@ scoped_refptr<T> make_scoped_refptr(T* t) {
 | 
|    return scoped_refptr<T>(t);
 | 
|  }
 | 
|  
 | 
| +#if defined(DISABLE_SCOPED_REFPTR_CONVERSION_OPERATOR)
 | 
| +// Temporary operator overloads to facilitate the transition...
 | 
| +template <typename T, typename U>
 | 
| +bool operator==(const scoped_refptr<T>& lhs, const U* rhs) {
 | 
| +  return lhs.get() == rhs;
 | 
| +}
 | 
| +
 | 
| +template <typename T, typename U>
 | 
| +bool operator==(const T* lhs, const scoped_refptr<U>& rhs) {
 | 
| +  return lhs == rhs.get();
 | 
| +}
 | 
| +
 | 
| +template <typename T, typename U>
 | 
| +bool operator!=(const scoped_refptr<T>& lhs, const U* rhs) {
 | 
| +  return !operator==(lhs, rhs);
 | 
| +}
 | 
| +
 | 
| +template <typename T, typename U>
 | 
| +bool operator!=(const T* lhs, const scoped_refptr<U>& rhs) {
 | 
| +  return !operator==(lhs, rhs);
 | 
| +}
 | 
| +
 | 
| +template <typename T>
 | 
| +std::ostream& operator<<(std::ostream& out, const scoped_refptr<T>& p) {
 | 
| +  return out << p.get();
 | 
| +}
 | 
| +#endif  // defined(DISABLE_SCOPED_REFPTR_CONVERSION_OPERATOR)
 | 
| +
 | 
|  #endif  // BASE_MEMORY_REF_COUNTED_H_
 | 
| 
 |