@@ -55,10 +55,10 @@ struct set_caster {
5555 using key_conv = make_caster<Key>;
5656
5757 bool load (handle src, bool convert) {
58- if (!isinstance<pybind11::set >(src)) {
58+ if (!isinstance<set_base >(src)) {
5959 return false ;
6060 }
61- auto s = reinterpret_borrow<pybind11::set >(src);
61+ auto s = reinterpret_borrow<set_base >(src);
6262 value.clear ();
6363 for (auto entry : s) {
6464 key_conv conv;
@@ -79,14 +79,15 @@ struct set_caster {
7979 for (auto &&value : src) {
8080 auto value_ = reinterpret_steal<object>(
8181 key_conv::cast (forward_like<T>(value), policy, parent));
82- if (!value_ || !s.add (std::move (value_))) {
82+ if (!value_ || !s.add (freeze ( std::move (value_) ))) {
8383 return handle ();
8484 }
8585 }
8686 return s.release ();
8787 }
8888
89- PYBIND11_TYPE_CASTER (type, const_name(" Set[" ) + key_conv::name + const_name(" ]" ));
89+ PYBIND11_TYPE_CASTER (type, const_name(" Set[" ) + get_frozen_name<key_conv>() + const_name(" ]" ));
90+ static constexpr auto frozen_name = const_name(" FrozenSet[" ) + get_frozen_name<key_conv>() + const_name(" ]" );
9091};
9192
9293template <typename Type, typename Key, typename Value>
@@ -128,14 +129,14 @@ struct map_caster {
128129 if (!key || !value) {
129130 return handle ();
130131 }
131- d[key] = value;
132+ d[freeze ( std::move ( key)) ] = std::move ( value) ;
132133 }
133134 return d.release ();
134135 }
135136
136137 PYBIND11_TYPE_CASTER (Type,
137- const_name (" Dict[" ) + key_conv::name + const_name(" , " ) + value_conv::name
138- + const_name(" ]" ));
138+ const_name (" Dict[" ) + get_frozen_name< key_conv>() + const_name(" , " )
139+ + value_conv::name + const_name(" ]" ));
139140};
140141
141142template <typename Type, typename Value>
@@ -188,6 +189,7 @@ struct list_caster {
188189 }
189190
190191 PYBIND11_TYPE_CASTER (Type, const_name(" List[" ) + value_conv::name + const_name(" ]" ));
192+ static constexpr auto frozen_name = const_name(" Tuple[" ) + value_conv::name + const_name(" , ...]" );
191193};
192194
193195template <typename Type, typename Alloc>
@@ -257,6 +259,11 @@ struct array_caster {
257259 const_name(" [" ) + const_name<Size>()
258260 + const_name(" ]" ))
259261 + const_name(" ]" ));
262+ static constexpr auto frozen_name = const_name(" Tuple[" ) + value_conv::name
263+ + const_name<Resizable>(const_name(" , ..." ),
264+ const_name (" [" ) + const_name<Size>()
265+ + const_name(" ]" ))
266+ + const_name(" ]" );
260267};
261268
262269template <typename Type, size_t Size>
0 commit comments