ソースを参照

dense_map/set: get around a nasty issue of gcc 7.5 with deduced return types and friend functions

Michele Caini 4 年 前
コミット
07a36123e5
2 ファイル変更8 行追加4 行削除
  1. 4 2
      src/entt/container/dense_map.hpp
  2. 4 2
      src/entt/container/dense_set.hpp

+ 4 - 2
src/entt/container/dense_map.hpp

@@ -109,7 +109,8 @@ public:
     }
 
     template<typename ILhs, typename IRhs>
-    friend auto operator-(const dense_map_iterator<ILhs> &, const dense_map_iterator<IRhs> &) ENTT_NOEXCEPT;
+    // auto is fine here but gcc 7.5.0 has a nasty issue with deduced return types and friend functions
+    friend /* auto */ std::ptrdiff_t operator-(const dense_map_iterator<ILhs> &, const dense_map_iterator<IRhs> &) ENTT_NOEXCEPT;
 
     template<typename ILhs, typename IRhs>
     friend bool operator==(const dense_map_iterator<ILhs> &, const dense_map_iterator<IRhs> &) ENTT_NOEXCEPT;
@@ -122,7 +123,8 @@ private:
 };
 
 template<typename ILhs, typename IRhs>
-[[nodiscard]] auto operator-(const dense_map_iterator<ILhs> &lhs, const dense_map_iterator<IRhs> &rhs) ENTT_NOEXCEPT {
+// auto is fine here but gcc 7.5.0 has a nasty issue with deduced return types and friend functions
+[[nodiscard]] /* auto */ std::ptrdiff_t operator-(const dense_map_iterator<ILhs> &lhs, const dense_map_iterator<IRhs> &rhs) ENTT_NOEXCEPT {
     return lhs.it - rhs.it;
 }
 

+ 4 - 2
src/entt/container/dense_set.hpp

@@ -98,7 +98,8 @@ public:
     }
 
     template<typename ILhs, typename IRhs>
-    friend auto operator-(const dense_set_iterator<ILhs> &, const dense_set_iterator<IRhs> &) ENTT_NOEXCEPT;
+    // auto is fine here but gcc 7.5.0 has a nasty issue with deduced return types and friend functions
+    friend /* auto */ std::ptrdiff_t operator-(const dense_set_iterator<ILhs> &, const dense_set_iterator<IRhs> &) ENTT_NOEXCEPT;
 
     template<typename ILhs, typename IRhs>
     friend bool operator==(const dense_set_iterator<ILhs> &, const dense_set_iterator<IRhs> &) ENTT_NOEXCEPT;
@@ -111,7 +112,8 @@ private:
 };
 
 template<typename ILhs, typename IRhs>
-[[nodiscard]] auto operator-(const dense_set_iterator<ILhs> &lhs, const dense_set_iterator<IRhs> &rhs) ENTT_NOEXCEPT {
+// auto is fine here but gcc 7.5.0 has a nasty issue with deduced return types and friend functions
+[[nodiscard]] /* auto */ std::ptrdiff_t operator-(const dense_set_iterator<ILhs> &lhs, const dense_set_iterator<IRhs> &rhs) ENTT_NOEXCEPT {
     return lhs.it - rhs.it;
 }