99# include < boost/python/object/class.hpp>
1010# include < boost/python/converter/type_id.hpp>
1111# include < boost/python/object/inheritance.hpp>
12+ # include < boost/python/object/find_instance.hpp>
1213# include < boost/ref.hpp>
1314# include < boost/type.hpp>
1415# include < boost/mpl/select_type.hpp>
@@ -153,67 +154,88 @@ struct pointer_holder_back_reference : instance_holder
153154
154155 // Forward construction to the held object
155156 pointer_holder_back_reference (PyObject* p)
156- : m_p(new Value(p)) {}
157+ : m_p(new BackReferenceType(p)) {
158+ (void )instance_finder<BackReferenceType>::registration;
159+ }
160+
157161
158162
159163 template <class A1 >
160164 pointer_holder_back_reference (PyObject* p, A1 a1)
161- : m_p(new Value (p
165+ : m_p(new BackReferenceType (p
162166 , (typename unwrap_reference<A1>::type&)(a1)
163167 ))
164- {}
168+ {
169+ (void )instance_finder<BackReferenceType>::registration;
170+ }
171+
165172
166173 template <class A1 , class A2 >
167174 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2)
168- : m_p(new Value (p
175+ : m_p(new BackReferenceType (p
169176 , (typename unwrap_reference<A1>::type&)(a1)
170177 , (typename unwrap_reference<A2>::type&)(a2)
171178 ))
172- {}
179+ {
180+ (void )instance_finder<BackReferenceType>::registration;
181+ }
182+
173183
174184 template <class A1 , class A2 , class A3 >
175185 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3)
176- : m_p(new Value (p
186+ : m_p(new BackReferenceType (p
177187 , (typename unwrap_reference<A1>::type&)(a1)
178188 , (typename unwrap_reference<A2>::type&)(a2)
179189 , (typename unwrap_reference<A3>::type&)(a3)
180190 ))
181- {}
191+ {
192+ (void )instance_finder<BackReferenceType>::registration;
193+ }
194+
182195
183196 template <class A1 , class A2 , class A3 , class A4 >
184197 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4)
185- : m_p(new Value (p
198+ : m_p(new BackReferenceType (p
186199 , (typename unwrap_reference<A1>::type&)(a1)
187200 , (typename unwrap_reference<A2>::type&)(a2)
188201 , (typename unwrap_reference<A3>::type&)(a3)
189202 , (typename unwrap_reference<A4>::type&)(a4)
190203 ))
191- {}
204+ {
205+ (void )instance_finder<BackReferenceType>::registration;
206+ }
207+
192208
193209 template <class A1 , class A2 , class A3 , class A4 , class A5 >
194210 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
195- : m_p(new Value (p
211+ : m_p(new BackReferenceType (p
196212 , (typename unwrap_reference<A1>::type&)(a1)
197213 , (typename unwrap_reference<A2>::type&)(a2)
198214 , (typename unwrap_reference<A3>::type&)(a3)
199215 , (typename unwrap_reference<A4>::type&)(a4)
200216 , (typename unwrap_reference<A5>::type&)(a5)
201- )) {}
217+ )) {
218+ (void )instance_finder<BackReferenceType>::registration;
219+ }
220+
202221
203222 template <class A1 , class A2 , class A3 , class A4 , class A5 , class A6 >
204223 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
205- : m_p(new Value (p
224+ : m_p(new BackReferenceType (p
206225 , (typename unwrap_reference<A1>::type&)(a1)
207226 , (typename unwrap_reference<A2>::type&)(a2)
208227 , (typename unwrap_reference<A3>::type&)(a3)
209228 , (typename unwrap_reference<A4>::type&)(a4)
210229 , (typename unwrap_reference<A5>::type&)(a5)
211230 , (typename unwrap_reference<A6>::type&)(a6)
212- )) {}
231+ )) {
232+ (void )instance_finder<BackReferenceType>::registration;
233+ }
234+
213235
214236 template <class A1 , class A2 , class A3 , class A4 , class A5 , class A6 , class A7 >
215237 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
216- : m_p(new Value (p
238+ : m_p(new BackReferenceType (p
217239 , (typename unwrap_reference<A1>::type&)(a1)
218240 , (typename unwrap_reference<A2>::type&)(a2)
219241 , (typename unwrap_reference<A3>::type&)(a3)
@@ -222,11 +244,14 @@ struct pointer_holder_back_reference : instance_holder
222244 , (typename unwrap_reference<A6>::type&)(a6)
223245 , (typename unwrap_reference<A7>::type&)(a7)
224246 ))
225- {}
247+ {
248+ (void )instance_finder<BackReferenceType>::registration;
249+ }
250+
226251
227252 template <class A1 , class A2 , class A3 , class A4 , class A5 , class A6 , class A7 , class A8 >
228253 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
229- : m_p(new Value (p
254+ : m_p(new BackReferenceType (p
230255 , (typename unwrap_reference<A1>::type&)(a1)
231256 , (typename unwrap_reference<A2>::type&)(a2)
232257 , (typename unwrap_reference<A3>::type&)(a3)
@@ -236,11 +261,14 @@ struct pointer_holder_back_reference : instance_holder
236261 , (typename unwrap_reference<A7>::type&)(a7)
237262 , (typename unwrap_reference<A8>::type&)(a8)
238263 ))
239- {}
264+ {
265+ (void )instance_finder<BackReferenceType>::registration;
266+ }
267+
240268
241269 template <class A1 , class A2 , class A3 , class A4 , class A5 , class A6 , class A7 , class A8 , class A9 >
242270 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
243- : m_p(new Value (p
271+ : m_p(new BackReferenceType (p
244272 , (typename unwrap_reference<A1>::type&)(a1)
245273 , (typename unwrap_reference<A2>::type&)(a2)
246274 , (typename unwrap_reference<A3>::type&)(a3)
@@ -251,11 +279,14 @@ struct pointer_holder_back_reference : instance_holder
251279 , (typename unwrap_reference<A8>::type&)(a8)
252280 , (typename unwrap_reference<A9>::type&)(a9)
253281 ))
254- {}
282+ {
283+ (void )instance_finder<BackReferenceType>::registration;
284+ }
285+
255286
256287 template <class A1 , class A2 , class A3 , class A4 , class A5 , class A6 , class A7 , class A8 , class A9 , class A10 >
257288 pointer_holder_back_reference (PyObject* p, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9, A10 a10)
258- : m_p(new Value (p
289+ : m_p(new BackReferenceType (p
259290 , (typename unwrap_reference<A1>::type&)(a1)
260291 , (typename unwrap_reference<A2>::type&)(a2)
261292 , (typename unwrap_reference<A3>::type&)(a3)
@@ -267,7 +298,10 @@ struct pointer_holder_back_reference : instance_holder
267298 , (typename unwrap_reference<A9>::type&)(a9)
268299 , (typename unwrap_reference<A10>::type&)(a10)
269300 ))
270- {}
301+ {
302+ (void )instance_finder<BackReferenceType>::registration;
303+ }
304+
271305
272306 private: // required holder implementation
273307 void * holds (converter::undecorated_type_id_t );
0 commit comments