浏览代码

stl: allow injecting memory

skypjack 18 小时之前
父节点
当前提交
e0edfcf7e0
共有 3 个文件被更改,包括 31 次插入11 次删除
  1. 14 11
      src/entt/stl/memory.hpp
  2. 4 0
      test/entt/stl_ext/memory.cpp
  3. 13 0
      test/include/entt/ext/stl/memory.hpp

+ 14 - 11
src/entt/stl/memory.hpp

@@ -1,11 +1,14 @@
 #ifndef ENTT_STL_MEMORY_HPP
 #define ENTT_STL_MEMORY_HPP
 
-#include <memory>
-#include <version>
-#include "../config/config.h"
-
 /*! @cond ENTT_INTERNAL */
+#if __has_include(<entt/ext/stl/memory.hpp>)
+#    include <entt/ext/stl/memory.hpp>
+#else
+#    include <memory>
+#    include <version>
+#    include "../config/config.h"
+
 namespace entt::stl {
 
 using std::addressof;
@@ -28,9 +31,9 @@ using std::uses_allocator_v;
 
 } // namespace entt::stl
 
-#ifndef ENTT_FORCE_STL
-#    if defined(__cpp_lib_to_address)
-#        define ENTT_HAS_TO_ADDRESS
+#    ifndef ENTT_FORCE_STL
+#        if defined(__cpp_lib_to_address)
+#            define ENTT_HAS_TO_ADDRESS
 
 namespace entt::stl {
 
@@ -38,11 +41,11 @@ using std::to_address;
 
 } // namespace entt::stl
 
+#        endif
 #    endif
-#endif
 
-#ifndef ENTT_HAS_TO_ADDRESS
-#    include <type_traits>
+#    ifndef ENTT_HAS_TO_ADDRESS
+#        include <type_traits>
 
 namespace entt::stl {
 
@@ -62,7 +65,7 @@ constexpr auto to_address(const Type &ptr) noexcept {
 }
 
 } // namespace entt::stl
-
+#    endif
 #endif
 /*! @endcond */
 

+ 4 - 0
test/entt/stl_ext/memory.cpp

@@ -1,2 +1,6 @@
 #include <gtest/gtest.h>
 #include <entt/stl/memory.hpp>
+
+TEST(Memory, HasInclude) {
+    static_assert(entt::stl::entt_ext_memory, "Header not properly included");
+}

+ 13 - 0
test/include/entt/ext/stl/memory.hpp

@@ -0,0 +1,13 @@
+#ifndef ENTT_EXT_STL_MEMORY_HPP
+#define ENTT_EXT_STL_MEMORY_HPP
+
+/*! @cond ENTT_INTERNAL */
+#include <memory>
+
+namespace entt::stl {
+using namespace std;
+static constexpr auto entt_ext_memory = true;
+} // namespace entt::stl
+/*! @endcond */
+
+#endif