Ok, since everyone wants the patch, here it is the _right_ way to fix the
compilation. The thing is that you can't have a specialized template
function as a friend. You have to specify the whole template parameters in
the friend declaration and make sure to use typenames that don't clash with
the current ones.

The way the definition was written was wrong. The way I rewritten it is good
in both gcc and MSVC 2005 / 2008.

(I used HTML mail so the lines won't be cut)

----CUT HERE----
Index: JavaScriptCore/wtf/ListHashSet.h
===================================================================
--- JavaScriptCore/wtf/ListHashSet.h    (revision 35445)
+++ JavaScriptCore/wtf/ListHashSet.h    (working copy)
@@ -110,7 +110,8 @@
         iterator makeIterator(Node*);
         const_iterator makeConstIterator(Node*) const;

-        friend void deleteAllValues<>(const ListHashSet&);
+        template<typename ValueArg_, typename HashArg_>
+        friend void deleteAllValues(const ListHashSet<ValueArg_,
HashArg_>&);

         ImplType m_impl;
         Node* m_head;
Index: JavaScriptCore/wtf/HashSet.h
===================================================================
--- JavaScriptCore/wtf/HashSet.h    (revision 35445)
+++ JavaScriptCore/wtf/HashSet.h    (working copy)
@@ -90,7 +90,8 @@
         void clear();

     private:
-        friend void deleteAllValues<>(const HashSet&);
+        template<typename ValueArg_, typename HashArg_, typename
TraitsArg_>
+        friend void deleteAllValues(const HashSet<ValueArg_, HashArg_,
TraitsArg_>&);

         HashTableType m_impl;
     };
Index: JavaScriptCore/wtf/PassRefPtr.h
===================================================================
--- JavaScriptCore/wtf/PassRefPtr.h    (revision 35445)
+++ JavaScriptCore/wtf/PassRefPtr.h    (working copy)
@@ -65,8 +65,11 @@
         template <typename U> PassRefPtr& operator=(const PassRefPtr<U>&);
         template <typename U> PassRefPtr& operator=(const RefPtr<U>&);

-        friend PassRefPtr adoptRef<T>(T*);
+
     private:
+        template<typename T_>
+        friend PassRefPtr<T_> adoptRef(T_* p);
+
         // adopting constructor
         PassRefPtr(T* ptr, bool) : m_ptr(ptr) {}
         mutable T* m_ptr;
Index: WebCore/platform/DeprecatedValueList.h
===================================================================
--- WebCore/platform/DeprecatedValueList.h    (revision 35445)
+++ WebCore/platform/DeprecatedValueList.h    (working copy)
@@ -128,7 +128,8 @@
     DeprecatedValueList &operator+=(const T &value) { impl.appendNode(new
DeprecatedValueListNode<T>(value)); return *this; }
     DeprecatedValueList &operator<<(const T &value) { impl.appendNode(new
DeprecatedValueListNode<T>(value)); return *this; }

-    friend bool operator==<>(const DeprecatedValueList<T> &, const
DeprecatedValueList<T> &);
+    template<class T_>
+    friend bool operator==(const DeprecatedValueList<T_> &, const
DeprecatedValueList<T_> &);

 private:
     DeprecatedValueListImpl impl;

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Chromium-dev" group.
To post to this group, send email to chromium-dev@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/chromium-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to