diff --git a/clif/pybind11/runtime.h b/clif/pybind11/runtime.h index 82608711..c8d4a316 100644 --- a/clif/pybind11/runtime.h +++ b/clif/pybind11/runtime.h @@ -179,31 +179,8 @@ namespace detail { return Clif_PyObjFrom(src, {}); \ } \ -template (), - bool has_customized_pointer_to_pointer_conversion = - !has_customized_optional_conversion && - clif_pybind11::HasPyObjAs(), - bool has_customized_unique_ptr_conversion = - !has_customized_optional_conversion && - !has_customized_pointer_to_pointer_conversion && - clif_pybind11::HasNonClifPyObjAs>(0), - bool has_customized_shared_ptr_conversion = - !has_customized_optional_conversion && - !has_customized_pointer_to_pointer_conversion && - !has_customized_unique_ptr_conversion && - clif_pybind11::HasPyObjAs>(), - bool is_type_abstract = - !has_customized_optional_conversion && - !has_customized_pointer_to_pointer_conversion && - !has_customized_unique_ptr_conversion && - !has_customized_shared_ptr_conversion && - std::is_abstract_v> -struct clif_type_caster; - -template -struct clif_type_caster { +template +struct clif_type_caster { public: PYBIND11_TYPE_CASTER(Type, const_name()); @@ -217,8 +194,11 @@ struct clif_type_caster { } }; -template -struct clif_type_caster { +template +struct clif_type_caster< + Type, + typename std::enable_if_t< + clif_pybind11::HasAbslOptionalPyObjAsFalseIfAbstract()>> { public: static constexpr auto name = const_name(); @@ -240,8 +220,12 @@ struct clif_type_caster { std::optional value; }; -template -struct clif_type_caster { +template +struct clif_type_caster< + Type, + typename std::enable_if_t< + !clif_pybind11::HasAbslOptionalPyObjAsFalseIfAbstract() && + clif_pybind11::HasPyObjAs()>> { public: static constexpr auto name = const_name(); @@ -268,8 +252,13 @@ struct clif_type_caster { Type* value; }; -template -struct clif_type_caster { +template +struct clif_type_caster< + Type, + typename std::enable_if_t< + !clif_pybind11::HasAbslOptionalPyObjAsFalseIfAbstract() && + !clif_pybind11::HasPyObjAs() && + clif_pybind11::HasNonClifPyObjAs>(0)>> { public: static constexpr auto name = const_name(); @@ -300,8 +289,14 @@ struct clif_type_caster { std::unique_ptr value; }; -template -struct clif_type_caster { +template +struct clif_type_caster< + Type, + typename std::enable_if_t< + !clif_pybind11::HasAbslOptionalPyObjAsFalseIfAbstract() && + !clif_pybind11::HasPyObjAs() && + !clif_pybind11::HasNonClifPyObjAs>(0) && + clif_pybind11::HasPyObjAs>()>> { public: static constexpr auto name = const_name(); @@ -332,8 +327,15 @@ struct clif_type_caster { }; -template -struct clif_type_caster { +template +struct clif_type_caster< + Type, + typename std::enable_if_t< + !clif_pybind11::HasAbslOptionalPyObjAsFalseIfAbstract() && + !clif_pybind11::HasPyObjAs() && + !clif_pybind11::HasNonClifPyObjAs>(0) && + !clif_pybind11::HasPyObjAs>() && + std::is_abstract_v>> { public: static constexpr auto name = const_name();