@@ -835,9 +835,18 @@ struct copyable_holder_caster : public type_caster_base<type> {
835
835
holder_type holder;
836
836
};
837
837
838
+ #define PYBIND11_HAVE_HOLDER_CASTER_WITH_SMART_HOLDER_SUPPORT
839
+
840
+ template <typename , typename SFINAE = void >
841
+ struct copyable_holder_caster_shared_ptr_with_smart_holder_support_enabled : std::true_type {};
842
+
838
843
// BAKEIN_WIP
839
844
template <typename type>
840
- struct copyable_holder_caster <type, std::shared_ptr<type>> : public type_caster_base<type> {
845
+ struct copyable_holder_caster <
846
+ type,
847
+ std::shared_ptr<type>,
848
+ enable_if_t <copyable_holder_caster_shared_ptr_with_smart_holder_support_enabled<type>::value>>
849
+ : public type_caster_base<type> {
841
850
public:
842
851
using base = type_caster_base<type>;
843
852
static_assert (std::is_base_of<base, type_caster<type>>::value,
@@ -983,9 +992,15 @@ struct move_only_holder_caster {
983
992
static constexpr auto name = type_caster_base<type>::name;
984
993
};
985
994
995
+ template <typename , typename SFINAE = void >
996
+ struct move_only_holder_caster_unique_ptr_with_smart_holder_support_enabled : std::true_type {};
997
+
986
998
// BAKEIN_WIP
987
999
template <typename type, typename deleter>
988
- struct move_only_holder_caster <type, std::unique_ptr<type, deleter>>
1000
+ struct move_only_holder_caster <
1001
+ type,
1002
+ std::unique_ptr<type, deleter>,
1003
+ enable_if_t <move_only_holder_caster_unique_ptr_with_smart_holder_support_enabled<type>::value>>
989
1004
: public type_caster_base<type> {
990
1005
public:
991
1006
using base = type_caster_base<type>;
0 commit comments