comparison DEPENDENCIES/generic/include/boost/intrusive/bs_set.hpp @ 101:c530137014c0

Update Boost headers (1.58.0)
author Chris Cannam
date Mon, 07 Sep 2015 11:12:49 +0100
parents 2665513ce2d3
children
comparison
equal deleted inserted replaced
100:793467b5e61c 101:c530137014c0
1 ///////////////////////////////////////////////////////////////////////////// 1 /////////////////////////////////////////////////////////////////////////////
2 // 2 //
3 // (C) Copyright Ion Gaztanaga 2013-2013 3 // (C) Copyright Ion Gaztanaga 2013-2014
4 // 4 //
5 // Distributed under the Boost Software License, Version 1.0. 5 // Distributed under the Boost Software License, Version 1.0.
6 // (See accompanying file LICENSE_1_0.txt or copy at 6 // (See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt) 7 // http://www.boost.org/LICENSE_1_0.txt)
8 // 8 //
14 14
15 #include <boost/intrusive/detail/config_begin.hpp> 15 #include <boost/intrusive/detail/config_begin.hpp>
16 #include <boost/intrusive/intrusive_fwd.hpp> 16 #include <boost/intrusive/intrusive_fwd.hpp>
17 #include <boost/intrusive/detail/mpl.hpp> 17 #include <boost/intrusive/detail/mpl.hpp>
18 #include <boost/intrusive/bstree.hpp> 18 #include <boost/intrusive/bstree.hpp>
19 #include <iterator> 19 #include <boost/move/utility_core.hpp>
20 #include <boost/move/move.hpp> 20 #include <boost/static_assert.hpp>
21
22 #if defined(BOOST_HAS_PRAGMA_ONCE)
23 # pragma once
24 #endif
21 25
22 namespace boost { 26 namespace boost {
23 namespace intrusive { 27 namespace intrusive {
24 28
25 //! The class template bs_set is an intrusive container, that mimics most of 29 //! The class template bs_set is an intrusive container, that mimics most of
34 //! \c constant_time_size<>, \c size_type<> and 38 //! \c constant_time_size<>, \c size_type<> and
35 //! \c compare<>. 39 //! \c compare<>.
36 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) 40 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
37 template<class T, class ...Options> 41 template<class T, class ...Options>
38 #else 42 #else
39 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize> 43 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
40 #endif 44 #endif
41 class bs_set_impl 45 class bs_set_impl
42 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED 46 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
43 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms> 47 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder>
44 #endif 48 #endif
45 { 49 {
46 /// @cond 50 /// @cond
47 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms> tree_type; 51 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, BsTreeAlgorithms, HeaderHolder> tree_type;
48 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set_impl) 52 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_set_impl)
49 53
50 typedef tree_type implementation_defined; 54 typedef tree_type implementation_defined;
51 /// @endcond 55 /// @endcond
52 56
89 : tree_type(true, b, e, cmp, v_traits) 93 : tree_type(true, b, e, cmp, v_traits)
90 {} 94 {}
91 95
92 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) 96 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
93 bs_set_impl(BOOST_RV_REF(bs_set_impl) x) 97 bs_set_impl(BOOST_RV_REF(bs_set_impl) x)
94 : tree_type(::boost::move(static_cast<tree_type&>(x))) 98 : tree_type(BOOST_MOVE_BASE(tree_type, x))
95 {} 99 {}
96 100
97 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) 101 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
98 bs_set_impl& operator=(BOOST_RV_REF(bs_set_impl) x) 102 bs_set_impl& operator=(BOOST_RV_REF(bs_set_impl) x)
99 { return static_cast<bs_set_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); } 103 { return static_cast<bs_set_impl&>(tree_type::operator=(BOOST_MOVE_BASE(tree_type, x))); }
100 104
101 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED 105 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
102 //! @copydoc ::boost::intrusive::bstree::~bstree() 106 //! @copydoc ::boost::intrusive::bstree::~bstree()
103 ~bs_set_impl(); 107 ~bs_set_impl();
104 108
166 void swap(bs_set_impl& other); 170 void swap(bs_set_impl& other);
167 171
168 //! @copydoc ::boost::intrusive::bstree::clone_from 172 //! @copydoc ::boost::intrusive::bstree::clone_from
169 template <class Cloner, class Disposer> 173 template <class Cloner, class Disposer>
170 void clone_from(const bs_set_impl &src, Cloner cloner, Disposer disposer); 174 void clone_from(const bs_set_impl &src, Cloner cloner, Disposer disposer);
171 175
172 #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED 176 #endif //#ifdef BOOST_iNTRUSIVE_DOXYGEN_INVOKED
173 177
174 //! @copydoc ::boost::intrusive::bstree::insert_unique(reference) 178 //! @copydoc ::boost::intrusive::bstree::insert_unique(reference)
175 std::pair<iterator, bool> insert(reference value) 179 std::pair<iterator, bool> insert(reference value)
176 { return tree_type::insert_unique(value); } 180 { return tree_type::insert_unique(value); }
245 249
246 //! @copydoc ::boost::intrusive::bstree::clear_and_dispose 250 //! @copydoc ::boost::intrusive::bstree::clear_and_dispose
247 template<class Disposer> 251 template<class Disposer>
248 void clear_and_dispose(Disposer disposer); 252 void clear_and_dispose(Disposer disposer);
249 253
254 #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
255
250 //! @copydoc ::boost::intrusive::bstree::count(const_reference)const 256 //! @copydoc ::boost::intrusive::bstree::count(const_reference)const
251 size_type count(const_reference value) const; 257 size_type count(const_reference value) const
258 { return static_cast<size_type>(this->tree_type::find(value) == this->tree_type::cend()); }
252 259
253 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const 260 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
254 template<class KeyType, class KeyValueCompare> 261 template<class KeyType, class KeyValueCompare>
255 size_type count(const KeyType& key, KeyValueCompare comp) const; 262 size_type count(const KeyType& key, KeyValueCompare comp) const
256 263 { return static_cast<size_type>(this->tree_type::find(key, comp) == this->tree_type::cend()); }
264
265 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
266
257 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) 267 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
258 iterator lower_bound(const_reference value); 268 iterator lower_bound(const_reference value);
259 269
260 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) 270 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
261 template<class KeyType, class KeyValueCompare> 271 template<class KeyType, class KeyValueCompare>
262 iterator lower_bound(const KeyType& key, KeyValueCompare comp); 272 iterator lower_bound(const KeyType& key, KeyValueCompare comp);
263 273
264 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const 274 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
294 304
295 //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const 305 //! @copydoc ::boost::intrusive::bstree::find(const KeyType&,KeyValueCompare)const
296 template<class KeyType, class KeyValueCompare> 306 template<class KeyType, class KeyValueCompare>
297 const_iterator find(const KeyType& key, KeyValueCompare comp) const; 307 const_iterator find(const KeyType& key, KeyValueCompare comp) const;
298 308
299 //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference) 309 #endif // #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
300 std::pair<iterator,iterator> equal_range(const_reference value); 310
301 311 //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)
302 //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare) 312 std::pair<iterator,iterator> equal_range(const_reference value)
303 template<class KeyType, class KeyValueCompare> 313 { return this->tree_type::lower_bound_range(value); }
304 std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp); 314
305 315 //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)
306 //! @copydoc ::boost::intrusive::bstree::equal_range(const_reference)const 316 template<class KeyType, class KeyValueCompare>
317 std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
318 { return this->tree_type::lower_bound_range(key, comp); }
319
320 //! @copydoc ::boost::intrusive::rbtree::equal_range(const_reference)const
307 std::pair<const_iterator, const_iterator> 321 std::pair<const_iterator, const_iterator>
308 equal_range(const_reference value) const; 322 equal_range(const_reference value) const
309 323 { return this->tree_type::lower_bound_range(value); }
310 //! @copydoc ::boost::intrusive::bstree::equal_range(const KeyType&,KeyValueCompare)const 324
325 //! @copydoc ::boost::intrusive::rbtree::equal_range(const KeyType&,KeyValueCompare)const
311 template<class KeyType, class KeyValueCompare> 326 template<class KeyType, class KeyValueCompare>
312 std::pair<const_iterator, const_iterator> 327 std::pair<const_iterator, const_iterator>
313 equal_range(const KeyType& key, KeyValueCompare comp) const; 328 equal_range(const KeyType& key, KeyValueCompare comp) const
329 { return this->tree_type::lower_bound_range(key, comp); }
330
331 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
314 332
315 //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool) 333 //! @copydoc ::boost::intrusive::bstree::bounded_range(const_reference,const_reference,bool,bool)
316 std::pair<iterator,iterator> bounded_range 334 std::pair<iterator,iterator> bounded_range
317 (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed); 335 (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed);
318 336
379 //! same options (either explicitly or implicitly) are used. 397 //! same options (either explicitly or implicitly) are used.
380 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 398 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
381 template<class T, class ...Options> 399 template<class T, class ...Options>
382 #else 400 #else
383 template<class T, class O1 = void, class O2 = void 401 template<class T, class O1 = void, class O2 = void
384 , class O3 = void, class O4 = void> 402 , class O3 = void, class O4 = void
403 , class O5 = void>
385 #endif 404 #endif
386 struct make_bs_set 405 struct make_bs_set
387 { 406 {
388 /// @cond 407 /// @cond
389 typedef typename pack_options 408 typedef typename pack_options
390 < bstree_defaults, 409 < bstree_defaults,
391 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 410 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
392 O1, O2, O3, O4 411 O1, O2, O3, O4, O5
393 #else 412 #else
394 Options... 413 Options...
395 #endif 414 #endif
396 >::type packed_options; 415 >::type packed_options;
397 416
401 typedef bs_set_impl 420 typedef bs_set_impl
402 < value_traits 421 < value_traits
403 , typename packed_options::compare 422 , typename packed_options::compare
404 , typename packed_options::size_type 423 , typename packed_options::size_type
405 , packed_options::constant_time_size 424 , packed_options::constant_time_size
425 , typename packed_options::header_holder_type
406 > implementation_defined; 426 > implementation_defined;
407 /// @endcond 427 /// @endcond
408 typedef implementation_defined type; 428 typedef implementation_defined type;
409 }; 429 };
410 430
411 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED 431 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
412 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 432 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
413 template<class T, class O1, class O2, class O3, class O4> 433 template<class T, class O1, class O2, class O3, class O4, class O5>
414 #else 434 #else
415 template<class T, class ...Options> 435 template<class T, class ...Options>
416 #endif 436 #endif
417 class bs_set 437 class bs_set
418 : public make_bs_set<T, 438 : public make_bs_set<T,
419 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 439 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
420 O1, O2, O3, O4 440 O1, O2, O3, O4, O5
421 #else 441 #else
422 Options... 442 Options...
423 #endif 443 #endif
424 >::type 444 >::type
425 { 445 {
426 typedef typename make_bs_set 446 typedef typename make_bs_set
427 <T, 447 <T,
428 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 448 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
429 O1, O2, O3, O4 449 O1, O2, O3, O4, O5
430 #else 450 #else
431 Options... 451 Options...
432 #endif 452 #endif
433 >::type Base; 453 >::type Base;
434 454
453 , const value_traits &v_traits = value_traits()) 473 , const value_traits &v_traits = value_traits())
454 : Base(b, e, cmp, v_traits) 474 : Base(b, e, cmp, v_traits)
455 {} 475 {}
456 476
457 bs_set(BOOST_RV_REF(bs_set) x) 477 bs_set(BOOST_RV_REF(bs_set) x)
458 : Base(::boost::move(static_cast<Base&>(x))) 478 : Base(BOOST_MOVE_BASE(Base, x))
459 {} 479 {}
460 480
461 bs_set& operator=(BOOST_RV_REF(bs_set) x) 481 bs_set& operator=(BOOST_RV_REF(bs_set) x)
462 { return static_cast<bs_set &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); } 482 { return static_cast<bs_set &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); }
463 483
464 static bs_set &container_from_end_iterator(iterator end_iterator) 484 static bs_set &container_from_end_iterator(iterator end_iterator)
465 { return static_cast<bs_set &>(Base::container_from_end_iterator(end_iterator)); } 485 { return static_cast<bs_set &>(Base::container_from_end_iterator(end_iterator)); }
466 486
467 static const bs_set &container_from_end_iterator(const_iterator end_iterator) 487 static const bs_set &container_from_end_iterator(const_iterator end_iterator)
488 //! \c constant_time_size<>, \c size_type<> and 508 //! \c constant_time_size<>, \c size_type<> and
489 //! \c compare<>. 509 //! \c compare<>.
490 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) 510 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
491 template<class T, class ...Options> 511 template<class T, class ...Options>
492 #else 512 #else
493 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize> 513 template<class ValueTraits, class Compare, class SizeType, bool ConstantTimeSize, typename HeaderHolder>
494 #endif 514 #endif
495 class bs_multiset_impl 515 class bs_multiset_impl
496 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED 516 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
497 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms> 517 : public bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder>
498 #endif 518 #endif
499 { 519 {
500 /// @cond 520 /// @cond
501 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms> tree_type; 521 typedef bstree_impl<ValueTraits, Compare, SizeType, ConstantTimeSize, RbTreeAlgorithms, HeaderHolder> tree_type;
502 522
503 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset_impl) 523 BOOST_MOVABLE_BUT_NOT_COPYABLE(bs_multiset_impl)
504 typedef tree_type implementation_defined; 524 typedef tree_type implementation_defined;
505 /// @endcond 525 /// @endcond
506 526
543 : tree_type(false, b, e, cmp, v_traits) 563 : tree_type(false, b, e, cmp, v_traits)
544 {} 564 {}
545 565
546 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&) 566 //! @copydoc ::boost::intrusive::bstree::bstree(bstree &&)
547 bs_multiset_impl(BOOST_RV_REF(bs_multiset_impl) x) 567 bs_multiset_impl(BOOST_RV_REF(bs_multiset_impl) x)
548 : tree_type(::boost::move(static_cast<tree_type&>(x))) 568 : tree_type(BOOST_MOVE_BASE(tree_type, x))
549 {} 569 {}
550 570
551 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&) 571 //! @copydoc ::boost::intrusive::bstree::operator=(bstree &&)
552 bs_multiset_impl& operator=(BOOST_RV_REF(bs_multiset_impl) x) 572 bs_multiset_impl& operator=(BOOST_RV_REF(bs_multiset_impl) x)
553 { return static_cast<bs_multiset_impl&>(tree_type::operator=(::boost::move(static_cast<tree_type&>(x)))); } 573 { return static_cast<bs_multiset_impl&>(tree_type::operator=(BOOST_MOVE_BASE(tree_type, x))); }
554 574
555 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED 575 #ifdef BOOST_INTRUSIVE_DOXYGEN_INVOKED
556 //! @copydoc ::boost::intrusive::bstree::~bstree() 576 //! @copydoc ::boost::intrusive::bstree::~bstree()
557 ~bs_multiset_impl(); 577 ~bs_multiset_impl();
558 578
688 size_type count(const_reference value) const; 708 size_type count(const_reference value) const;
689 709
690 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const 710 //! @copydoc ::boost::intrusive::bstree::count(const KeyType&,KeyValueCompare)const
691 template<class KeyType, class KeyValueCompare> 711 template<class KeyType, class KeyValueCompare>
692 size_type count(const KeyType& key, KeyValueCompare comp) const; 712 size_type count(const KeyType& key, KeyValueCompare comp) const;
693 713
694 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference) 714 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)
695 iterator lower_bound(const_reference value); 715 iterator lower_bound(const_reference value);
696 716
697 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare) 717 //! @copydoc ::boost::intrusive::bstree::lower_bound(const KeyType&,KeyValueCompare)
698 template<class KeyType, class KeyValueCompare> 718 template<class KeyType, class KeyValueCompare>
699 iterator lower_bound(const KeyType& key, KeyValueCompare comp); 719 iterator lower_bound(const KeyType& key, KeyValueCompare comp);
700 720
701 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const 721 //! @copydoc ::boost::intrusive::bstree::lower_bound(const_reference)const
816 //! same options (either explicitly or implicitly) are used. 836 //! same options (either explicitly or implicitly) are used.
817 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 837 #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
818 template<class T, class ...Options> 838 template<class T, class ...Options>
819 #else 839 #else
820 template<class T, class O1 = void, class O2 = void 840 template<class T, class O1 = void, class O2 = void
821 , class O3 = void, class O4 = void> 841 , class O3 = void, class O4 = void
842 , class O5 = void>
822 #endif 843 #endif
823 struct make_bs_multiset 844 struct make_bs_multiset
824 { 845 {
825 /// @cond 846 /// @cond
826 typedef typename pack_options 847 typedef typename pack_options
827 < bstree_defaults, 848 < bstree_defaults,
828 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 849 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
829 O1, O2, O3, O4 850 O1, O2, O3, O4, O5
830 #else 851 #else
831 Options... 852 Options...
832 #endif 853 #endif
833 >::type packed_options; 854 >::type packed_options;
834 855
838 typedef bs_multiset_impl 859 typedef bs_multiset_impl
839 < value_traits 860 < value_traits
840 , typename packed_options::compare 861 , typename packed_options::compare
841 , typename packed_options::size_type 862 , typename packed_options::size_type
842 , packed_options::constant_time_size 863 , packed_options::constant_time_size
864 , typename packed_options::header_holder_type
843 > implementation_defined; 865 > implementation_defined;
844 /// @endcond 866 /// @endcond
845 typedef implementation_defined type; 867 typedef implementation_defined type;
846 }; 868 };
847 869
848 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED 870 #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
849 871
850 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 872 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
851 template<class T, class O1, class O2, class O3, class O4> 873 template<class T, class O1, class O2, class O3, class O4, class O5>
852 #else 874 #else
853 template<class T, class ...Options> 875 template<class T, class ...Options>
854 #endif 876 #endif
855 class bs_multiset 877 class bs_multiset
856 : public make_bs_multiset<T, 878 : public make_bs_multiset<T,
857 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 879 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
858 O1, O2, O3, O4 880 O1, O2, O3, O4, O5
859 #else 881 #else
860 Options... 882 Options...
861 #endif 883 #endif
862 >::type 884 >::type
863 { 885 {
864 typedef typename make_bs_multiset<T, 886 typedef typename make_bs_multiset<T,
865 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 887 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
866 O1, O2, O3, O4 888 O1, O2, O3, O4, O5
867 #else 889 #else
868 Options... 890 Options...
869 #endif 891 #endif
870 >::type Base; 892 >::type Base;
871 893
891 , const value_traits &v_traits = value_traits()) 913 , const value_traits &v_traits = value_traits())
892 : Base(b, e, cmp, v_traits) 914 : Base(b, e, cmp, v_traits)
893 {} 915 {}
894 916
895 bs_multiset(BOOST_RV_REF(bs_multiset) x) 917 bs_multiset(BOOST_RV_REF(bs_multiset) x)
896 : Base(::boost::move(static_cast<Base&>(x))) 918 : Base(BOOST_MOVE_BASE(Base, x))
897 {} 919 {}
898 920
899 bs_multiset& operator=(BOOST_RV_REF(bs_multiset) x) 921 bs_multiset& operator=(BOOST_RV_REF(bs_multiset) x)
900 { return static_cast<bs_multiset &>(this->Base::operator=(::boost::move(static_cast<Base&>(x)))); } 922 { return static_cast<bs_multiset &>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); }
901 923
902 static bs_multiset &container_from_end_iterator(iterator end_iterator) 924 static bs_multiset &container_from_end_iterator(iterator end_iterator)
903 { return static_cast<bs_multiset &>(Base::container_from_end_iterator(end_iterator)); } 925 { return static_cast<bs_multiset &>(Base::container_from_end_iterator(end_iterator)); }
904 926
905 static const bs_multiset &container_from_end_iterator(const_iterator end_iterator) 927 static const bs_multiset &container_from_end_iterator(const_iterator end_iterator)