mirror of
https://github.com/pybind/pybind11.git
synced 2024-12-01 17:37:15 +00:00
pybind11/detail/init.h: replace type_uses_smart_holder_type_caster<> with is_same<Holder<Class>, smart_holder> (still does not build).
This commit is contained in:
parent
03e6a93c73
commit
e8cd42953e
@ -10,7 +10,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
#include "smart_holder_sfinae_hooks_only.h"
|
#include "smart_holder_poc.h"
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
||||||
|
|
||||||
@ -156,9 +156,10 @@ void construct(value_and_holder &v_h, Alias<Class> *alias_ptr, bool) {
|
|||||||
// holder. This also handles types like std::shared_ptr<T> and std::unique_ptr<T> where T is a
|
// holder. This also handles types like std::shared_ptr<T> and std::unique_ptr<T> where T is a
|
||||||
// derived type (through those holder's implicit conversion from derived class holder
|
// derived type (through those holder's implicit conversion from derived class holder
|
||||||
// constructors).
|
// constructors).
|
||||||
template <typename Class,
|
template <
|
||||||
detail::enable_if_t<!detail::type_uses_smart_holder_type_caster<Cpp<Class>>::value, int>
|
typename Class,
|
||||||
= 0>
|
detail::enable_if_t<!std::is_same<Holder<Class>, pybindit::memory::smart_holder>::value, int>
|
||||||
|
= 0>
|
||||||
void construct(value_and_holder &v_h, Holder<Class> holder, bool need_alias) {
|
void construct(value_and_holder &v_h, Holder<Class> holder, bool need_alias) {
|
||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
auto *ptr = holder_helper<Holder<Class>>::get(holder);
|
auto *ptr = holder_helper<Holder<Class>>::get(holder);
|
||||||
@ -200,10 +201,11 @@ void construct(value_and_holder &v_h, Alias<Class> &&result, bool) {
|
|||||||
v_h.value_ptr() = new Alias<Class>(std::move(result));
|
v_h.value_ptr() = new Alias<Class>(std::move(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Class,
|
template <
|
||||||
typename D = std::default_delete<Cpp<Class>>,
|
typename Class,
|
||||||
detail::enable_if_t<detail::type_uses_smart_holder_type_caster<Cpp<Class>>::value, int>
|
typename D = std::default_delete<Cpp<Class>>,
|
||||||
= 0>
|
detail::enable_if_t<std::is_same<Holder<Class>, pybindit::memory::smart_holder>::value, int>
|
||||||
|
= 0>
|
||||||
void construct(value_and_holder &v_h, std::unique_ptr<Cpp<Class>, D> &&unq_ptr, bool need_alias) {
|
void construct(value_and_holder &v_h, std::unique_ptr<Cpp<Class>, D> &&unq_ptr, bool need_alias) {
|
||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
auto *ptr = unq_ptr.get();
|
auto *ptr = unq_ptr.get();
|
||||||
@ -223,10 +225,11 @@ void construct(value_and_holder &v_h, std::unique_ptr<Cpp<Class>, D> &&unq_ptr,
|
|||||||
v_h.type->init_instance(v_h.inst, &smhldr);
|
v_h.type->init_instance(v_h.inst, &smhldr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Class,
|
template <
|
||||||
typename D = std::default_delete<Alias<Class>>,
|
typename Class,
|
||||||
detail::enable_if_t<detail::type_uses_smart_holder_type_caster<Alias<Class>>::value, int>
|
typename D = std::default_delete<Alias<Class>>,
|
||||||
= 0>
|
detail::enable_if_t<std::is_same<Holder<Class>, pybindit::memory::smart_holder>::value, int>
|
||||||
|
= 0>
|
||||||
void construct(value_and_holder &v_h,
|
void construct(value_and_holder &v_h,
|
||||||
std::unique_ptr<Alias<Class>, D> &&unq_ptr,
|
std::unique_ptr<Alias<Class>, D> &&unq_ptr,
|
||||||
bool /*need_alias*/) {
|
bool /*need_alias*/) {
|
||||||
@ -238,9 +241,10 @@ void construct(value_and_holder &v_h,
|
|||||||
v_h.type->init_instance(v_h.inst, &smhldr);
|
v_h.type->init_instance(v_h.inst, &smhldr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Class,
|
template <
|
||||||
detail::enable_if_t<detail::type_uses_smart_holder_type_caster<Cpp<Class>>::value, int>
|
typename Class,
|
||||||
= 0>
|
detail::enable_if_t<std::is_same<Holder<Class>, pybindit::memory::smart_holder>::value, int>
|
||||||
|
= 0>
|
||||||
void construct(value_and_holder &v_h, std::shared_ptr<Cpp<Class>> &&shd_ptr, bool need_alias) {
|
void construct(value_and_holder &v_h, std::shared_ptr<Cpp<Class>> &&shd_ptr, bool need_alias) {
|
||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
auto *ptr = shd_ptr.get();
|
auto *ptr = shd_ptr.get();
|
||||||
@ -254,9 +258,10 @@ void construct(value_and_holder &v_h, std::shared_ptr<Cpp<Class>> &&shd_ptr, boo
|
|||||||
v_h.type->init_instance(v_h.inst, &smhldr);
|
v_h.type->init_instance(v_h.inst, &smhldr);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Class,
|
template <
|
||||||
detail::enable_if_t<detail::type_uses_smart_holder_type_caster<Alias<Class>>::value, int>
|
typename Class,
|
||||||
= 0>
|
detail::enable_if_t<std::is_same<Holder<Class>, pybindit::memory::smart_holder>::value, int>
|
||||||
|
= 0>
|
||||||
void construct(value_and_holder &v_h,
|
void construct(value_and_holder &v_h,
|
||||||
std::shared_ptr<Alias<Class>> &&shd_ptr,
|
std::shared_ptr<Alias<Class>> &&shd_ptr,
|
||||||
bool /*need_alias*/) {
|
bool /*need_alias*/) {
|
||||||
|
Loading…
Reference in New Issue
Block a user