Преглед на файлове

Fix c++20 -Wambiguous-reversed-operator in hashtable (#1766)

Fix for build errors like
...\Jolt\Core\Factory.cpp:22:11: error: ISO C++20 considers use of overloaded operator '!=' (with operand types 'ClassNameMap::iterator' (aka 'JPH::HashTable<std::basic_string_view<char>, std::pair<std::basic_string_view<char>, const JPH::RTTI *>, JPH::UnorderedMapDetail<std::basic_string_view<char>, const JPH::RTTI *>, JPH::Hash<std::string_view>, std::equal_to<std::basic_string_view<char>>>::iterator') and 'JPH::HashTable<std::basic_string_view<char>, std::pair<std::basic_string_view<char>, const JPH::RTTI *>, JPH::UnorderedMapDetail<std::basic_string_view<char>, const JPH::RTTI *>, JPH::Hash<std::string_view>, std::equal_to<std::basic_string_view<char>>>::iterator') to be ambiguous despite there being a unique best viable function with non-reversed arguments [-Werror,-Wambiguous-reversed-operator]
        return c != mClassNameMap.end()? c->second : nullptr;

Related
https://stackoverflow.com/a/60387060
virtul преди 2 седмици
родител
ревизия
589106a492
променени са 1 файла, в които са добавени 4 реда и са изтрити 0 реда
  1. 4 0
      Jolt/Core/HashTable.h

+ 4 - 0
Jolt/Core/HashTable.h

@@ -364,6 +364,8 @@ public:
 		using Base = IteratorBase<HashTable, iterator>;
 		using Base = IteratorBase<HashTable, iterator>;
 
 
 	public:
 	public:
+		using IteratorBase<HashTable, iterator>::operator ==;
+
 		/// Properties
 		/// Properties
 		using reference = typename Base::value_type &;
 		using reference = typename Base::value_type &;
 		using pointer = typename Base::value_type *;
 		using pointer = typename Base::value_type *;
@@ -401,6 +403,8 @@ public:
 		using Base = IteratorBase<const HashTable, const_iterator>;
 		using Base = IteratorBase<const HashTable, const_iterator>;
 
 
 	public:
 	public:
+		using IteratorBase<const HashTable, const_iterator>::operator ==;
+
 		/// Properties
 		/// Properties
 		using reference = const typename Base::value_type &;
 		using reference = const typename Base::value_type &;
 		using pointer = const typename Base::value_type *;
 		using pointer = const typename Base::value_type *;