Browse Source

*: get around an issue with entt::integral_constant on (very) old compilers

Michele Caini 5 years ago
parent
commit
61e96e2dab
2 changed files with 12 additions and 13 deletions
  1. 2 2
      src/entt/entity/organizer.hpp
  2. 10 11
      src/entt/process/process.hpp

+ 2 - 2
src/entt/entity/organizer.hpp

@@ -391,7 +391,7 @@ public:
             callback,
             callback,
             +[](const bool rw, type_info *buffer, const std::size_t length) { return rw ? fill_dependencies(typename resource_type::rw{}, buffer, length) : fill_dependencies(typename resource_type::ro{}, buffer, length); },
             +[](const bool rw, type_info *buffer, const std::size_t length) { return rw ? fill_dependencies(typename resource_type::rw{}, buffer, length) : fill_dependencies(typename resource_type::ro{}, buffer, length); },
             +[](basic_registry<entity_type> &reg) { void(to_args(reg, typename resource_type::args{})); },
             +[](basic_registry<entity_type> &reg) { void(to_args(reg, typename resource_type::args{})); },
-            type_id<integral_constant<Candidate>>()
+            type_id<std::integral_constant<decltype(Candidate), Candidate>>()
         });
         });
     }
     }
 
 
@@ -428,7 +428,7 @@ public:
             +[](basic_registry<entity_type> &reg) {
             +[](basic_registry<entity_type> &reg) {
                 void(to_args(reg, typename resource_type::args{}));
                 void(to_args(reg, typename resource_type::args{}));
             },
             },
-            type_id<integral_constant<Candidate>>()
+            type_id<std::integral_constant<decltype(Candidate), Candidate>>()
         });
         });
     }
     }
 
 

+ 10 - 11
src/entt/process/process.hpp

@@ -5,7 +5,6 @@
 #include <utility>
 #include <utility>
 #include <type_traits>
 #include <type_traits>
 #include "../config/config.h"
 #include "../config/config.h"
-#include "../core/type_traits.hpp"
 
 
 
 
 namespace entt {
 namespace entt {
@@ -83,31 +82,31 @@ class process {
     };
     };
 
 
     template<typename Target = Derived>
     template<typename Target = Derived>
-    auto next(integral_constant<state::UNINITIALIZED>)
+    auto next(std::integral_constant<state, state::UNINITIALIZED>)
     -> decltype(std::declval<Target>().init(), void()) {
     -> decltype(std::declval<Target>().init(), void()) {
         static_cast<Target *>(this)->init();
         static_cast<Target *>(this)->init();
     }
     }
 
 
     template<typename Target = Derived>
     template<typename Target = Derived>
-    auto next(integral_constant<state::RUNNING>, Delta delta, void *data)
+    auto next(std::integral_constant<state, state::RUNNING>, Delta delta, void *data)
     -> decltype(std::declval<Target>().update(delta, data), void()) {
     -> decltype(std::declval<Target>().update(delta, data), void()) {
         static_cast<Target *>(this)->update(delta, data);
         static_cast<Target *>(this)->update(delta, data);
     }
     }
 
 
     template<typename Target = Derived>
     template<typename Target = Derived>
-    auto next(integral_constant<state::SUCCEEDED>)
+    auto next(std::integral_constant<state, state::SUCCEEDED>)
     -> decltype(std::declval<Target>().succeeded(), void()) {
     -> decltype(std::declval<Target>().succeeded(), void()) {
         static_cast<Target *>(this)->succeeded();
         static_cast<Target *>(this)->succeeded();
     }
     }
 
 
     template<typename Target = Derived>
     template<typename Target = Derived>
-    auto next(integral_constant<state::FAILED>)
+    auto next(std::integral_constant<state, state::FAILED>)
     -> decltype(std::declval<Target>().failed(), void()) {
     -> decltype(std::declval<Target>().failed(), void()) {
         static_cast<Target *>(this)->failed();
         static_cast<Target *>(this)->failed();
     }
     }
 
 
     template<typename Target = Derived>
     template<typename Target = Derived>
-    auto next(integral_constant<state::ABORTED>)
+    auto next(std::integral_constant<state, state::ABORTED>)
     -> decltype(std::declval<Target>().aborted(), void()) {
     -> decltype(std::declval<Target>().aborted(), void()) {
         static_cast<Target *>(this)->aborted();
         static_cast<Target *>(this)->aborted();
     }
     }
@@ -230,11 +229,11 @@ public:
     void tick(const Delta delta, void *data = nullptr) {
     void tick(const Delta delta, void *data = nullptr) {
         switch (current) {
         switch (current) {
         case state::UNINITIALIZED:
         case state::UNINITIALIZED:
-            next(integral_constant<state::UNINITIALIZED>{});
+            next(std::integral_constant<state, state::UNINITIALIZED>{});
             current = state::RUNNING;
             current = state::RUNNING;
             break;
             break;
         case state::RUNNING:
         case state::RUNNING:
-            next(integral_constant<state::RUNNING>{}, delta, data);
+            next(std::integral_constant<state, state::RUNNING>{}, delta, data);
             break;
             break;
         default:
         default:
             // suppress warnings
             // suppress warnings
@@ -244,16 +243,16 @@ public:
         // if it's dead, it must be notified and removed immediately
         // if it's dead, it must be notified and removed immediately
         switch(current) {
         switch(current) {
         case state::SUCCEEDED:
         case state::SUCCEEDED:
-            next(integral_constant<state::SUCCEEDED>{});
+            next(std::integral_constant<state, state::SUCCEEDED>{});
             current = state::FINISHED;
             current = state::FINISHED;
             break;
             break;
         case state::FAILED:
         case state::FAILED:
-            next(integral_constant<state::FAILED>{});
+            next(std::integral_constant<state, state::FAILED>{});
             current = state::FINISHED;
             current = state::FINISHED;
             stopped = true;
             stopped = true;
             break;
             break;
         case state::ABORTED:
         case state::ABORTED:
-            next(integral_constant<state::ABORTED>{});
+            next(std::integral_constant<state, state::ABORTED>{});
             current = state::FINISHED;
             current = state::FINISHED;
             stopped = true;
             stopped = true;
             break;
             break;