Bläddra i källkod

explicitly state typedef inheritance for Intel compiler bug

David Rose 24 år sedan
förälder
incheckning
71377eeaac
2 ändrade filer med 35 tillägg och 3 borttagningar
  1. 3 3
      panda/src/putil/ordered_vector.I
  2. 32 0
      panda/src/putil/ordered_vector.h

+ 3 - 3
panda/src/putil/ordered_vector.I

@@ -814,8 +814,8 @@ operator = (const ov_multiset<Key, Compare> &copy) {
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 template<class Key, class Compare>
 template<class Key, class Compare>
 ov_multiset<Key, Compare>::iterator ov_multiset<Key, Compare>::
 ov_multiset<Key, Compare>::iterator ov_multiset<Key, Compare>::
-insert(ordered_vector<Key, Compare>::iterator position, 
-       const ordered_vector<Key, Compare>::value_type &key) {
+insert(ov_multiset<Key, Compare>::iterator position, 
+       const ov_multiset<Key, Compare>::value_type &key) {
   return ordered_vector<Key, Compare>::insert_nonunique(position, key);
   return ordered_vector<Key, Compare>::insert_nonunique(position, key);
 }
 }
 
 
@@ -826,7 +826,7 @@ insert(ordered_vector<Key, Compare>::iterator position,
 ////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////
 template<class Key, class Compare>
 template<class Key, class Compare>
 INLINE ov_multiset<Key, Compare>::iterator ov_multiset<Key, Compare>::
 INLINE ov_multiset<Key, Compare>::iterator ov_multiset<Key, Compare>::
-insert(const ordered_vector<Key, Compare>::value_type &key) {
+insert(const ov_multiset<Key, Compare>::value_type &key) {
   return ordered_vector<Key, Compare>::insert_nonunique(key);
   return ordered_vector<Key, Compare>::insert_nonunique(key);
 }
 }
 
 

+ 32 - 0
panda/src/putil/ordered_vector.h

@@ -216,6 +216,22 @@ private:
 template<class Key, class Compare = less<Key> >
 template<class Key, class Compare = less<Key> >
 class ov_set : public ordered_vector<Key, Compare> {
 class ov_set : public ordered_vector<Key, Compare> {
 public:
 public:
+  // The Intel compiler doesn't seem to inherit these typedefs
+  // completely--it gets confused in certain cases.  We'll make it
+  // explicit.
+  typedef ordered_vector<Key, Compare>::key_type key_type;
+  typedef ordered_vector<Key, Compare>::value_type value_type;
+  typedef ordered_vector<Key, Compare>::reference reference;
+  typedef ordered_vector<Key, Compare>::const_reference const_reference;
+  typedef ordered_vector<Key, Compare>::key_compare key_compare;
+  typedef ordered_vector<Key, Compare>::value_compare value_compare;
+  typedef ordered_vector<Key, Compare>::iterator iterator;
+  typedef ordered_vector<Key, Compare>::const_iterator const_iterator;
+  typedef ordered_vector<Key, Compare>::reverse_iterator reverse_iterator;
+  typedef ordered_vector<Key, Compare>::const_reverse_iterator const_reverse_iterator;
+  typedef ordered_vector<Key, Compare>::difference_type difference_type;
+  typedef ordered_vector<Key, Compare>::size_type size_type;
+
   INLINE ov_set(const Compare &compare = Compare());
   INLINE ov_set(const Compare &compare = Compare());
   INLINE ov_set(const ov_set<Key, Compare> &copy);
   INLINE ov_set(const ov_set<Key, Compare> &copy);
   INLINE ov_set<Key, Compare> &operator = (const ov_set<Key, Compare> &copy);
   INLINE ov_set<Key, Compare> &operator = (const ov_set<Key, Compare> &copy);
@@ -235,6 +251,22 @@ public:
 template<class Key, class Compare = less<Key> >
 template<class Key, class Compare = less<Key> >
 class ov_multiset : public ordered_vector<Key, Compare> {
 class ov_multiset : public ordered_vector<Key, Compare> {
 public:
 public:
+  // The Intel compiler doesn't seem to inherit these typedefs
+  // completely--it gets confused in certain cases.  We'll make it
+  // explicit.
+  typedef ordered_vector<Key, Compare>::key_type key_type;
+  typedef ordered_vector<Key, Compare>::value_type value_type;
+  typedef ordered_vector<Key, Compare>::reference reference;
+  typedef ordered_vector<Key, Compare>::const_reference const_reference;
+  typedef ordered_vector<Key, Compare>::key_compare key_compare;
+  typedef ordered_vector<Key, Compare>::value_compare value_compare;
+  typedef ordered_vector<Key, Compare>::iterator iterator;
+  typedef ordered_vector<Key, Compare>::const_iterator const_iterator;
+  typedef ordered_vector<Key, Compare>::reverse_iterator reverse_iterator;
+  typedef ordered_vector<Key, Compare>::const_reverse_iterator const_reverse_iterator;
+  typedef ordered_vector<Key, Compare>::difference_type difference_type;
+  typedef ordered_vector<Key, Compare>::size_type size_type;
+
   INLINE ov_multiset(const Compare &compare = Compare());
   INLINE ov_multiset(const Compare &compare = Compare());
   INLINE ov_multiset(const ov_multiset<Key, Compare> &copy);
   INLINE ov_multiset(const ov_multiset<Key, Compare> &copy);
   INLINE ov_multiset<Key, Compare> &operator = (const ov_multiset<Key, Compare> &copy);
   INLINE ov_multiset<Key, Compare> &operator = (const ov_multiset<Key, Compare> &copy);