The test code compiles cleanly using GCC 3.2 however when I pass it through HPUX aCC I get error messages about the inability to convert strings to ints.
I can appreciate that aCC might be stricter than GCC in certain aspects however I cannot understand how GCC would compile and link it with no errors or warnings resulting in an executable that actually does what I want whereas aCC quits with errors, not just warnings.
Can anyone see what might be causing aCC to require conversion from string to int in the code below?
test.cc:
=====
Expand|Select|Wrap|Line Numbers
- #include <ExclusiveMap.h>
- #include <string>
- #include<iostream>
- using namespace std;
- class FloeLog
- {
- public:
- void init();
- private:
- ExclusiveMap<int, string> _logTypeMap; // aCC does not seem to like
- // ExclusiveMap<int, int> _logTypeMap; // No compile errors
- }; // class FloeLog
- void FloeLog::init()
- {
- cout << "Inside FloeLog::init(), about to do _logTypeMap.insert()\n";
- _logTypeMap.insert(12, "FLOE_EVENT");
- // _logTypeMap.insert(12, 13); // No compile errors
- }
- int main()
- {
- FloeLog FL;
- FL.init();
- return 0;
- }
============
Expand|Select|Wrap|Line Numbers
- #include <map>
- using namespace std;
- template <class C1, class C2>
- class ExclusiveMap
- {
- public:
- ExclusiveMap();
- bool insert(const C1& c1, const C2& c2);
- private:
- map<C1, C2> _map1;
- map<C2, C1> _map2;
- };
- template <class C1, class C2>
- ExclusiveMap<C1, C2>::ExclusiveMap()
- {
- }
- template <class C1, class C2>
- bool
- ExclusiveMap<C1, C2>::insert(const C1& c1, const C2& c2)
- {
- typename map<C1, C2>::iterator map1Iter = _map1.find(c1);
- typename map<C2, C1>::iterator map2Iter = _map2.find(c2); // This causes compile error when using HP aCC
- if (map1Iter == _map1.end() && map2Iter == _map2.end())
- {
- _map2[c2] = c1;
- _map1[c1] = c2;
- return true;
- }
- return false;
- }
<compiles and links without errors>
% /opt/aCC/bin/aCC -AA -c -g -I. test.cc
Error 226: "/opt/aCC-3.30.01/include_std/rw/tree.cc", line 492 # No appropriate function found for call of 'operator ()'. Last viable
candidate was "bool std::less<int>::operator ()(const int &,const int &) const" ["/opt/aCC-3.30.01/include_std/functional", line
167]. Argument of type 'const std::basic_string<char,std::char_traits<char>,std: :allocator<char> > &' could not be converted to
'const int &'.
if (!_C_key_compare(__x->_C_key(), __k))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error 226: "/opt/aCC-3.30.01/include_std/rw/tree.cc", line 500 # No appropriate function found for call of 'operator ()'. Last viable
candidate was "bool std::less<int>::operator ()(const int &,const int &) const" ["/opt/aCC-3.30.01/include_std/functional", line
167]. Argument of type 'const std::basic_string<char,std::char_traits<char>,std: :allocator<char> > &' could not be converted to
'const int &'.
|| _C_key_compare(__k, ((_C_tree_iter&)__j)._C_node->_C_key())) ? e
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^
Error 556: "./ExclusiveMap.h", line 30 # Unable to generate specialization "__rw::__rw_tree_iter<std::pair<const
std::basic_string<char,std::char_traits<char>,std: :allocator<char> >,int>,long,std::pair<const int,int> *,std::pair<const int,int>
&,__rw::__rw_rb_tree_node<std::allocator<std::pair <const int,int> >,std::pair<const
std::basic_string<char,std::char_traits<char>,std: :allocator<char>
>,int>,std::basic_string<char,std::char_traits<cha r>,std::allocator<char> >,__rw::__select1st<std::pair<const
std::basic_string<char,std::char_traits<char>,std: :allocator<char>
>,int>,std::basic_string<char,std::char_traits<cha r>,std::allocator<char> > > > >
__rw::__rb_tree<std::basic_string<char,std::char_t raits<char>,std::allocator<char> >,std::pair<const
std::basic_string<char,std::char_traits<char>,std: :allocator<char> >,int>,__rw::__select1st<std::pair<const
std::basic_string<char,std::char_traits<char>,std: :allocator<char>
>,int>,std::basic_string<char,std::char_traits<cha r>,std::allocator<char> > >,std::less<int>,std::allocator<std::pair<const
int,int> > >::find(const std::basic_string<char,std::char_traits<char>,std: :allocator<char> > &)" due to errors during generation.
typename map<C2, C1>::iterator map2Iter = _map2.find(c2); // This causes compile error when using HP aCC
^^^^^^^^^^^^^^
Error 440: "/opt/aCC-3.30.01/include_std/utility", line 117 # Cannot initialize 'const int' with 'const class
basic_string<char,std::char_traits<char>,std::allo cator<char> >'.
: first (__rhs.first), second (__rhs.second) { }
^^^^^^^^^^^