[Webkit-unassigned] [Bug 22325] New: MSVC gives bogus error about template argument specialization?

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Nov 17 14:26:26 PST 2008


https://bugs.webkit.org/show_bug.cgi?id=22325

           Summary: MSVC gives bogus error about template argument
                    specialization?
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: Macintosh
        OS/Version: Mac OS X 10.5
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: New Bugs
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: eric at webkit.org
                CC: mjs at apple.com, aroben at apple.com, sfalken at apple.com


This seems to be a bogus error from MSVC.  When I last chatted with mjs about
this, he seemed to agree it looked bogus.  I would like to upstream our change
to this file, however I'm not sure if our use of pragma's is 100% the way
WebKit likes this done, but I'll make up a patch to do that first. :)

Here is how we fixed it:
--- chrome/src/webkit/third_party/WebKit/JavaScriptCore/wtf/RefPtrHashMap.h
(WebKit at 37604) 
+++ chrome/src/webkit/third_party/WebKit/JavaScriptCore/wtf/RefPtrHashMap.h
(Chromium) 
@@ -18,6 +18,9 @@
  *
  */

+// Temporarily disable warning about using explicit template arguments
+#pragma warning(disable:4344)
+
 namespace WTF {

     // This specialization is a direct copy of HashMap, with overloaded
functions
@@ -334,3 +337,6 @@
     }

 } // namespace WTF
+
+// Re-enable warning disabled at top of file
+#pragma warning(default:4344)

This is the original error:

c:\projects\webkit\javascriptcore\wtf\RefPtrHashMap.h(176) : warning C4344:
behavior change: use of explicit template arguments results in call to
'WTF::HashTableIterator<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>
WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::find<JSC::UString::Rep*,WTF::RefPtrHashMapRawKeyTranslator<RawKeyType,ValueType,ValueTraits,HashFunctions>>(const
T &)'
        with
        [
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<JSC::OffsetLocation>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,
            RawKeyType=JSC::UString::Rep *,
           
ValueType=std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,
           
ValueTraits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<JSC::OffsetLocation>>,
            T=JSC::UString::Rep *
        ]
        but the regular function
'WTF::HashTableIterator<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>
WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::find(const
WTF::RefPtr<T> &)' is a better match
        with
        [
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<JSC::OffsetLocation>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,
            T=JSC::UString::Rep
        ]
        if you expect
'WTF::HashTableIterator<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>
WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::find(const
WTF::RefPtr<T> &)' to be called then you need to make it an explicit
specialization
        with
        [
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<JSC::OffsetLocation>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,
            T=JSC::UString::Rep
        ]
        c:\projects\webkit\javascriptcore\wtf\RefPtrHashMap.h(175) : while
compiling class template member function
'WTF::HashTableIteratorAdapter<HashTableType,ValueType>
WTF::HashMap<KeyArg,MappedArg>::find(JSC::UString::Rep *)'
        with
        [
           
HashTableType=WTF::HashTable<WTF::RefPtr<JSC::UString::Rep>,std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>>,WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<JSC::OffsetLocation>>,WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>>,
           
ValueType=std::pair<WTF::RefPtr<JSC::UString::Rep>,JSC::OffsetLocation>,
            KeyArg=WTF::RefPtr<JSC::UString::Rep>,
            MappedArg=JSC::OffsetLocation
        ]
        VM\CodeBlock.h(161) : see reference to class template instantiation
'WTF::HashMap<KeyArg,MappedArg>' being compiled
        with
        [
            KeyArg=WTF::RefPtr<JSC::UString::Rep>,
            MappedArg=JSC::OffsetLocation
        ]
c:\projects\webkit\javascriptcore\wtf\RefPtrHashMap.h(270) : warning C4344:
behavior change: use of explicit template arguments results in call to 'Value
*WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::lookup<JSC::UString::Rep*,WTF::RefPtrHashMapRawKeyTranslator<RawKeyType,ValueType,ValueTraits,HashFunctions>>(const
T &)'
        with
        [
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>,
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<WTF::RefPtr<JSC::EvalNode>>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,
            RawKeyType=JSC::UString::Rep *,
           
ValueType=std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>,
           
ValueTraits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<WTF::RefPtr<JSC::EvalNode>>>,
            T=JSC::UString::Rep *
        ]
        but the regular function 'std::pair<_Ty1,_Ty2>
*WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::lookup(const
Key &)' is a better match
        with
        [
            _Ty1=WTF::RefPtr<JSC::UString::Rep>,
            _Ty2=WTF::RefPtr<JSC::EvalNode>,
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<WTF::RefPtr<JSC::EvalNode>>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>
        ]
        if you expect 'std::pair<_Ty1,_Ty2>
*WTF::HashTable<Key,Value,Extractor,HashFunctions,Traits,KeyTraits>::lookup(const
Key &)' to be called then you need to make it an explicit specialization
        with
        [
            _Ty1=WTF::RefPtr<JSC::UString::Rep>,
            _Ty2=WTF::RefPtr<JSC::EvalNode>,
            Key=WTF::RefPtr<JSC::UString::Rep>,
           
Value=std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>,
           
Extractor=WTF::PairFirstExtractor<std::pair<WTF::RefPtr<JSC::UString::Rep>,WTF::RefPtr<JSC::EvalNode>>>,
            HashFunctions=WTF::StrHash<WTF::RefPtr<JSC::UString::Rep>>,
           
Traits=WTF::PairHashTraits<WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>,WTF::HashTraits<WTF::RefPtr<JSC::EvalNode>>>,
            KeyTraits=WTF::HashTraits<WTF::RefPtr<JSC::UString::Rep>>
        ]
        c:\projects\webkit\javascriptcore\wtf\RefPtrHashMap.h(269) : while
compiling class template member function 'WTF::RefPtr<T>
WTF::HashMap<KeyArg,MappedArg>::inlineGet(JSC::UString::Rep *) const'
        with
        [
            T=JSC::EvalNode,
            KeyArg=WTF::RefPtr<JSC::UString::Rep>,
            MappedArg=WTF::RefPtr<JSC::EvalNode>
        ]
        c:\projects\webkit\javascriptcore\wtf\RefPtrHashMap.h(127) : while
compiling class template member function 'int
WTF::HashMap<KeyArg,MappedArg>::size(void) const'
        with
        [
            KeyArg=WTF::RefPtr<JSC::UString::Rep>,
            MappedArg=WTF::RefPtr<JSC::EvalNode>
        ]
        c:\projects\webkit\javascriptcore\vm\EvalCodeCache.h(73) : see
reference to class template instantiation 'WTF::HashMap<KeyArg,MappedArg>'
being compiled
        with
        [
            KeyArg=WTF::RefPtr<JSC::UString::Rep>,
            MappedArg=WTF::RefPtr<JSC::EvalNode>
        ]


-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the webkit-unassigned mailing list