Ticket #2126: make_shared.hpp.diff
File make_shared.hpp.diff, 11.2 KB (added by , 14 years ago) |
---|
-
make_shared.hpp
98 98 99 99 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 100 100 101 void * pv = pd->address();101 T * pv = static_cast< T * >(pd->address()); 102 102 103 103 new( pv ) T(); 104 104 pd->set_initialized(); 105 105 106 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 106 boost::shared_ptr< T > p( pt, pv ); 107 boost::sp_accept_owner( &p, pv ); 108 return p; 107 109 } 108 110 109 111 template< class T, class A > boost::shared_ptr< T > allocate_shared( A const & a ) … … 112 114 113 115 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 114 116 115 void * pv = pd->address();117 T * pv = static_cast< T * >(pd->address()); 116 118 117 119 new( pv ) T(); 118 120 pd->set_initialized(); 119 121 120 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 122 boost::shared_ptr< T > p( pt, pv ); 123 boost::sp_accept_owner( &p, pv ); 124 return p; 121 125 } 122 126 123 127 #if defined( BOOST_HAS_VARIADIC_TMPL ) && defined( BOOST_HAS_RVALUE_REFS ) … … 130 134 131 135 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 132 136 133 void * pv = pd->address();137 T * pv = static_cast< T * >(pd->address()); 134 138 135 139 new( pv ) T( detail::forward<Args>( args )... ); 136 140 pd->set_initialized(); 137 141 138 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 142 boost::shared_ptr< T > p( pt, pv ); 143 boost::sp_accept_owner( &p, pv ); 144 return p; 139 145 } 140 146 141 147 template< class T, class A, class... Args > boost::shared_ptr< T > allocate_shared( A const & a, Args && ... args ) … … 144 150 145 151 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 146 152 147 void * pv = pd->address();153 T * pv = static_cast< T * >(pd->address()); 148 154 149 155 new( pv ) T( detail::forward<Args>( args )... ); 150 156 pd->set_initialized(); 151 157 152 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 158 boost::shared_ptr< T > p( pt, pv ); 159 boost::sp_accept_owner( &p, pv ); 160 return p; 153 161 } 154 162 155 163 #else … … 163 171 164 172 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 165 173 166 void * pv = pd->address();174 T * pv = static_cast< T * >(pd->address()); 167 175 168 176 new( pv ) T( a1 ); 169 177 pd->set_initialized(); 170 178 171 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 179 boost::shared_ptr< T > p( pt, pv ); 180 boost::sp_accept_owner( &p, pv ); 181 return p; 172 182 } 173 183 174 184 template< class T, class A, class A1 > … … 178 188 179 189 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 180 190 181 void * pv = pd->address();191 T * pv = static_cast< T * >(pd->address()); 182 192 183 193 new( pv ) T( a1 ); 184 194 pd->set_initialized(); 185 195 186 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 196 boost::shared_ptr< T > p( pt, pv ); 197 boost::sp_accept_owner( &p, pv ); 198 return p; 187 199 } 188 200 189 201 template< class T, class A1, class A2 > … … 193 205 194 206 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 195 207 196 void * pv = pd->address();208 T * pv = static_cast< T * >(pd->address()); 197 209 198 210 new( pv ) T( a1, a2 ); 199 211 pd->set_initialized(); 200 212 201 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 213 boost::shared_ptr< T > p( pt, pv ); 214 boost::sp_accept_owner( &p, pv ); 215 return p; 202 216 } 203 217 204 218 template< class T, class A, class A1, class A2 > … … 208 222 209 223 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 210 224 211 void * pv = pd->address();225 T * pv = static_cast< T * >(pd->address()); 212 226 213 227 new( pv ) T( a1, a2 ); 214 228 pd->set_initialized(); 215 229 216 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 230 boost::shared_ptr< T > p( pt, pv ); 231 boost::sp_accept_owner( &p, pv ); 232 return p; 217 233 } 218 234 219 235 template< class T, class A1, class A2, class A3 > … … 223 239 224 240 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 225 241 226 void * pv = pd->address();242 T * pv = static_cast< T * >(pd->address()); 227 243 228 244 new( pv ) T( a1, a2, a3 ); 229 245 pd->set_initialized(); 230 246 231 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 247 boost::shared_ptr< T > p( pt, pv ); 248 boost::sp_accept_owner( &p, pv ); 249 return p; 232 250 } 233 251 234 252 template< class T, class A, class A1, class A2, class A3 > … … 238 256 239 257 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 240 258 241 void * pv = pd->address();259 T * pv = static_cast< T * >(pd->address()); 242 260 243 261 new( pv ) T( a1, a2, a3 ); 244 262 pd->set_initialized(); 245 263 246 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 264 boost::shared_ptr< T > p( pt, pv ); 265 boost::sp_accept_owner( &p, pv ); 266 return p; 247 267 } 248 268 249 269 template< class T, class A1, class A2, class A3, class A4 > … … 253 273 254 274 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 255 275 256 void * pv = pd->address();276 T * pv = static_cast< T * >(pd->address()); 257 277 258 278 new( pv ) T( a1, a2, a3, a4 ); 259 279 pd->set_initialized(); 260 280 261 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 281 boost::shared_ptr< T > p( pt, pv ); 282 boost::sp_accept_owner( &p, pv ); 283 return p; 262 284 } 263 285 264 286 template< class T, class A, class A1, class A2, class A3, class A4 > … … 268 290 269 291 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 270 292 271 void * pv = pd->address();293 T * pv = static_cast< T * >(pd->address()); 272 294 273 295 new( pv ) T( a1, a2, a3, a4 ); 274 296 pd->set_initialized(); 275 297 276 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 298 boost::shared_ptr< T > p( pt, pv ); 299 boost::sp_accept_owner( &p, pv ); 300 return p; 277 301 } 278 302 279 303 template< class T, class A1, class A2, class A3, class A4, class A5 > … … 283 307 284 308 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 285 309 286 void * pv = pd->address();310 T * pv = static_cast< T * >(pd->address()); 287 311 288 312 new( pv ) T( a1, a2, a3, a4, a5 ); 289 313 pd->set_initialized(); 290 314 291 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 315 boost::shared_ptr< T > p( pt, pv ); 316 boost::sp_accept_owner( &p, pv ); 317 return p; 292 318 } 293 319 294 320 template< class T, class A, class A1, class A2, class A3, class A4, class A5 > … … 298 324 299 325 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 300 326 301 void * pv = pd->address();327 T * pv = static_cast< T * >(pd->address()); 302 328 303 329 new( pv ) T( a1, a2, a3, a4, a5 ); 304 330 pd->set_initialized(); 305 331 306 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 332 boost::shared_ptr< T > p( pt, pv ); 333 boost::sp_accept_owner( &p, pv ); 334 return p; 307 335 } 308 336 309 337 template< class T, class A1, class A2, class A3, class A4, class A5, class A6 > … … 313 341 314 342 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 315 343 316 void * pv = pd->address();344 T * pv = static_cast< T * >(pd->address()); 317 345 318 346 new( pv ) T( a1, a2, a3, a4, a5, a6 ); 319 347 pd->set_initialized(); 320 348 321 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 349 boost::shared_ptr< T > p( pt, pv ); 350 boost::sp_accept_owner( &p, pv ); 351 return p; 322 352 } 323 353 324 354 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6 > … … 328 358 329 359 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 330 360 331 void * pv = pd->address();361 T * pv = static_cast< T * >(pd->address()); 332 362 333 363 new( pv ) T( a1, a2, a3, a4, a5, a6 ); 334 364 pd->set_initialized(); 335 365 336 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 366 boost::shared_ptr< T > p( pt, pv ); 367 boost::sp_accept_owner( &p, pv ); 368 return p; 337 369 } 338 370 339 371 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > … … 343 375 344 376 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 345 377 346 void * pv = pd->address();378 T * pv = static_cast< T * >(pd->address()); 347 379 348 380 new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); 349 381 pd->set_initialized(); 350 382 351 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 383 boost::shared_ptr< T > p( pt, pv ); 384 boost::sp_accept_owner( &p, pv ); 385 return p; 352 386 } 353 387 354 388 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7 > … … 358 392 359 393 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 360 394 361 void * pv = pd->address();395 T * pv = static_cast< T * >(pd->address()); 362 396 363 397 new( pv ) T( a1, a2, a3, a4, a5, a6, a7 ); 364 398 pd->set_initialized(); 365 399 366 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 400 boost::shared_ptr< T > p( pt, pv ); 401 boost::sp_accept_owner( &p, pv ); 402 return p; 367 403 } 368 404 369 405 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > … … 373 409 374 410 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 375 411 376 void * pv = pd->address();412 T * pv = static_cast< T * >(pd->address()); 377 413 378 414 new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); 379 415 pd->set_initialized(); 380 416 381 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 417 boost::shared_ptr< T > p( pt, pv ); 418 boost::sp_accept_owner( &p, pv ); 419 return p; 382 420 } 383 421 384 422 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > … … 388 426 389 427 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 390 428 391 void * pv = pd->address();429 T * pv = static_cast< T * >(pd->address()); 392 430 393 431 new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8 ); 394 432 pd->set_initialized(); 395 433 396 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 434 boost::shared_ptr< T > p( pt, pv ); 435 boost::sp_accept_owner( &p, pv ); 436 return p; 397 437 } 398 438 399 439 template< class T, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > … … 403 443 404 444 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 405 445 406 void * pv = pd->address();446 T * pv = static_cast< T * >(pd->address()); 407 447 408 448 new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); 409 449 pd->set_initialized(); 410 450 411 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 451 boost::shared_ptr< T > p( pt, pv ); 452 boost::sp_accept_owner( &p, pv ); 453 return p; 412 454 } 413 455 414 456 template< class T, class A, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9 > … … 418 460 419 461 detail::sp_ms_deleter< T > * pd = boost::get_deleter< detail::sp_ms_deleter< T > >( pt ); 420 462 421 void * pv = pd->address();463 T * pv = static_cast< T * >(pd->address()); 422 464 423 465 new( pv ) T( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); 424 466 pd->set_initialized(); 425 467 426 return boost::shared_ptr< T >( pt, static_cast< T* >( pv ) ); 468 boost::shared_ptr< T > p( pt, pv ); 469 boost::sp_accept_owner( &p, pv ); 470 return p; 427 471 } 428 472 429 473 #endif