ykiko 1 yıl önce
ebeveyn
işleme
f803a7eca6

+ 2 - 2
include/pybind11/internal/kernel.h

@@ -10,7 +10,7 @@ struct capsule {
     void* ptr;
     void (*destructor)(void*);
 
-    template <typename T>
+    template <typename T, typename = std::enable_if_t<!(std::is_same_v<remove_cvref_t<T>, capsule>)>>
     capsule(T&& value) :
         ptr(new auto(std::forward<T>(value))), destructor([](void* ptr) {
             delete static_cast<std::decay_t<T>*>(ptr);
@@ -26,7 +26,7 @@ struct capsule {
     }
 
     ~capsule() {
-        if(ptr != nullptr && destructor != nullptr) destructor(ptr);
+        if(ptr && destructor) destructor(ptr);
     }
 };
 }  // namespace pybind11::impl

+ 0 - 3
include/pybind11/internal/types.h

@@ -365,9 +365,6 @@ class capsule : public object {
     PYBIND11_TYPE_IMPLEMENT(object, impl::capsule, handle(vm->builtins->attr("capsule"))._as<pkpy::Type>());
 
 public:
-    template <typename T>
-    capsule(T&& value) : object(create(std::forward<T>(value))) {}
-
     capsule(void* ptr, void (*destructor)(void*) = nullptr) : object(create(ptr, destructor)) {}
 
     void* data() const { return self().ptr; }