11#ifndef INCLUDED_BSLTF_STDSTATEFULALLOCATOR_CPP03
12#define INCLUDED_BSLTF_STDSTATEFULALLOCATOR_CPP03
63#ifdef COMPILING_BSLTF_STDSTATEFULALLOCATOR_H
92 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION =
true,
93 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT =
true,
94 bool PROPAGATE_ON_CONTAINER_SWAP =
true,
95 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT =
true,
96 bool IS_ALWAYS_EQUAL =
false>
97class StdStatefulAllocator {
119#if !defined(BSLSTL_ALLOCATOR_TRAITS_SUPPORTS_ALL_CPP11_DEDUCTIONS)
127 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT>
134 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT>
148 template <
class BDE_OTHER_TYPE>
152 typedef StdStatefulAllocator<
154 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
155 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
156 PROPAGATE_ON_CONTAINER_SWAP,
157 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
158 IS_ALWAYS_EQUAL>
other;
173 template <
class BDE_OTHER_TYPE>
176 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
177 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
178 PROPAGATE_ON_CONTAINER_SWAP,
179 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
180 IS_ALWAYS_EQUAL>& original);
187 operator=(
const StdStatefulAllocator& rhs) =
default;
197#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
200#ifndef BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT
201#define BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT 14
203#ifndef BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A
204#define BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT
207#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 0
208 template <
class ELEMENT_TYPE>
212#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 1
213 template <
class ELEMENT_TYPE,
class Args_01>
218#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 2
219 template <
class ELEMENT_TYPE,
class Args_01,
226#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 3
227 template <
class ELEMENT_TYPE,
class Args_01,
236#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 4
237 template <
class ELEMENT_TYPE,
class Args_01,
248#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 5
249 template <
class ELEMENT_TYPE,
class Args_01,
262#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 6
263 template <
class ELEMENT_TYPE,
class Args_01,
278#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 7
279 template <
class ELEMENT_TYPE,
class Args_01,
296#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 8
297 template <
class ELEMENT_TYPE,
class Args_01,
316#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 9
317 template <
class ELEMENT_TYPE,
class Args_01,
338#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 10
339 template <
class ELEMENT_TYPE,
class Args_01,
362#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 11
363 template <
class ELEMENT_TYPE,
class Args_01,
388#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 12
389 template <
class ELEMENT_TYPE,
class Args_01,
416#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 13
417 template <
class ELEMENT_TYPE,
class Args_01,
446#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_A >= 14
447 template <
class ELEMENT_TYPE,
class Args_01,
482 template <
class ELEMENT_TYPE,
class... Args>
498 template <
class ELEMENT_TYPE>
499 void destroy(ELEMENT_TYPE *address);
502#if !defined(BSLSTL_ALLOCATOR_TRAITS_SUPPORTS_ALL_CPP11_DEDUCTIONS)
529template <
class TYPE1,
531 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
532 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
533 bool PROPAGATE_ON_CONTAINER_SWAP,
534 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
535 bool IS_ALWAYS_EQUAL>
538 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
539 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
540 PROPAGATE_ON_CONTAINER_SWAP,
541 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
542 IS_ALWAYS_EQUAL>& lhs,
543 const StdStatefulAllocator<
545 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
546 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
547 PROPAGATE_ON_CONTAINER_SWAP,
548 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
549 IS_ALWAYS_EQUAL>& rhs);
553template <
class TYPE1,
555 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
556 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
557 bool PROPAGATE_ON_CONTAINER_SWAP,
558 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
559 bool IS_ALWAYS_EQUAL>
562 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
563 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
564 PROPAGATE_ON_CONTAINER_SWAP,
565 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
566 IS_ALWAYS_EQUAL>& lhs,
567 const StdStatefulAllocator<
569 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
570 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
571 PROPAGATE_ON_CONTAINER_SWAP,
572 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
573 IS_ALWAYS_EQUAL>& rhs);
586 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
587 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
588 bool PROPAGATE_ON_CONTAINER_SWAP,
589 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
590 bool IS_ALWAYS_EQUAL>
592StdStatefulAllocator<TYPE,
593 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
594 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
595 PROPAGATE_ON_CONTAINER_SWAP,
596 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
599: d_allocator_p(
bslma::Default::allocator(allocator))
604 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
605 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
606 bool PROPAGATE_ON_CONTAINER_SWAP,
607 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
608 bool IS_ALWAYS_EQUAL>
609template <
class BDE_OTHER_TYPE>
611StdStatefulAllocator<TYPE,
612 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
613 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
614 PROPAGATE_ON_CONTAINER_SWAP,
615 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
617StdStatefulAllocator(
const StdStatefulAllocator<
619 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
620 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
621 PROPAGATE_ON_CONTAINER_SWAP,
622 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
623 IS_ALWAYS_EQUAL>& original)
624: d_allocator_p(original.allocator())
630 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
631 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
632 bool PROPAGATE_ON_CONTAINER_SWAP,
633 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
634 bool IS_ALWAYS_EQUAL>
637StdStatefulAllocator<TYPE,
638 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
639 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
640 PROPAGATE_ON_CONTAINER_SWAP,
641 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
642 IS_ALWAYS_EQUAL>::allocate(
645 if (numElements > this->max_size()) {
646 BloombergLP::bsls::BslExceptionUtil::throwBadAlloc();
649 return static_cast<TYPE *
>(d_allocator_p->
allocate(
653#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
656#ifndef BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT
657#define BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT 14
659#ifndef BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B
660#define BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT
662#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 0
664 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
665 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
666 bool PROPAGATE_ON_CONTAINER_SWAP,
667 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
668 bool IS_ALWAYS_EQUAL>
669template <
class ELEMENT_TYPE>
672StdStatefulAllocator<TYPE,
673 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
674 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
675 PROPAGATE_ON_CONTAINER_SWAP,
676 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
677 IS_ALWAYS_EQUAL>::construct(
678 ELEMENT_TYPE *address)
680 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
685#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 1
687 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
688 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
689 bool PROPAGATE_ON_CONTAINER_SWAP,
690 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
691 bool IS_ALWAYS_EQUAL>
692template <
class ELEMENT_TYPE,
class Args_01>
695StdStatefulAllocator<TYPE,
696 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
697 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
698 PROPAGATE_ON_CONTAINER_SWAP,
699 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
700 IS_ALWAYS_EQUAL>::construct(
701 ELEMENT_TYPE *address,
704 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
709#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 2
711 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
712 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
713 bool PROPAGATE_ON_CONTAINER_SWAP,
714 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
715 bool IS_ALWAYS_EQUAL>
716template <
class ELEMENT_TYPE,
class Args_01,
720StdStatefulAllocator<TYPE,
721 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
722 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
723 PROPAGATE_ON_CONTAINER_SWAP,
724 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
725 IS_ALWAYS_EQUAL>::construct(
726 ELEMENT_TYPE *address,
730 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
736#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 3
738 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
739 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
740 bool PROPAGATE_ON_CONTAINER_SWAP,
741 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
742 bool IS_ALWAYS_EQUAL>
743template <
class ELEMENT_TYPE,
class Args_01,
748StdStatefulAllocator<TYPE,
749 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
750 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
751 PROPAGATE_ON_CONTAINER_SWAP,
752 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
753 IS_ALWAYS_EQUAL>::construct(
754 ELEMENT_TYPE *address,
759 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
766#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 4
768 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
769 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
770 bool PROPAGATE_ON_CONTAINER_SWAP,
771 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
772 bool IS_ALWAYS_EQUAL>
773template <
class ELEMENT_TYPE,
class Args_01,
779StdStatefulAllocator<TYPE,
780 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
781 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
782 PROPAGATE_ON_CONTAINER_SWAP,
783 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
784 IS_ALWAYS_EQUAL>::construct(
785 ELEMENT_TYPE *address,
791 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
799#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 5
801 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
802 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
803 bool PROPAGATE_ON_CONTAINER_SWAP,
804 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
805 bool IS_ALWAYS_EQUAL>
806template <
class ELEMENT_TYPE,
class Args_01,
813StdStatefulAllocator<TYPE,
814 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
815 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
816 PROPAGATE_ON_CONTAINER_SWAP,
817 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
818 IS_ALWAYS_EQUAL>::construct(
819 ELEMENT_TYPE *address,
826 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
835#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 6
837 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
838 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
839 bool PROPAGATE_ON_CONTAINER_SWAP,
840 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
841 bool IS_ALWAYS_EQUAL>
842template <
class ELEMENT_TYPE,
class Args_01,
850StdStatefulAllocator<TYPE,
851 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
852 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
853 PROPAGATE_ON_CONTAINER_SWAP,
854 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
855 IS_ALWAYS_EQUAL>::construct(
856 ELEMENT_TYPE *address,
864 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
874#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 7
876 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
877 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
878 bool PROPAGATE_ON_CONTAINER_SWAP,
879 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
880 bool IS_ALWAYS_EQUAL>
881template <
class ELEMENT_TYPE,
class Args_01,
890StdStatefulAllocator<TYPE,
891 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
892 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
893 PROPAGATE_ON_CONTAINER_SWAP,
894 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
895 IS_ALWAYS_EQUAL>::construct(
896 ELEMENT_TYPE *address,
905 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
916#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 8
918 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
919 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
920 bool PROPAGATE_ON_CONTAINER_SWAP,
921 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
922 bool IS_ALWAYS_EQUAL>
923template <
class ELEMENT_TYPE,
class Args_01,
933StdStatefulAllocator<TYPE,
934 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
935 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
936 PROPAGATE_ON_CONTAINER_SWAP,
937 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
938 IS_ALWAYS_EQUAL>::construct(
939 ELEMENT_TYPE *address,
949 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
961#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 9
963 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
964 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
965 bool PROPAGATE_ON_CONTAINER_SWAP,
966 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
967 bool IS_ALWAYS_EQUAL>
968template <
class ELEMENT_TYPE,
class Args_01,
979StdStatefulAllocator<TYPE,
980 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
981 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
982 PROPAGATE_ON_CONTAINER_SWAP,
983 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
984 IS_ALWAYS_EQUAL>::construct(
985 ELEMENT_TYPE *address,
996 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1009#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 10
1010template <
class TYPE,
1011 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1012 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1013 bool PROPAGATE_ON_CONTAINER_SWAP,
1014 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1015 bool IS_ALWAYS_EQUAL>
1016template <
class ELEMENT_TYPE,
class Args_01,
1028StdStatefulAllocator<TYPE,
1029 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1030 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1031 PROPAGATE_ON_CONTAINER_SWAP,
1032 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1033 IS_ALWAYS_EQUAL>::construct(
1034 ELEMENT_TYPE *address,
1046 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1060#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 11
1061template <
class TYPE,
1062 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1063 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1064 bool PROPAGATE_ON_CONTAINER_SWAP,
1065 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1066 bool IS_ALWAYS_EQUAL>
1067template <
class ELEMENT_TYPE,
class Args_01,
1080StdStatefulAllocator<TYPE,
1081 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1082 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1083 PROPAGATE_ON_CONTAINER_SWAP,
1084 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1085 IS_ALWAYS_EQUAL>::construct(
1086 ELEMENT_TYPE *address,
1099 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1114#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 12
1115template <
class TYPE,
1116 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1117 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1118 bool PROPAGATE_ON_CONTAINER_SWAP,
1119 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1120 bool IS_ALWAYS_EQUAL>
1121template <
class ELEMENT_TYPE,
class Args_01,
1135StdStatefulAllocator<TYPE,
1136 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1137 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1138 PROPAGATE_ON_CONTAINER_SWAP,
1139 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1140 IS_ALWAYS_EQUAL>::construct(
1141 ELEMENT_TYPE *address,
1155 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1171#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 13
1172template <
class TYPE,
1173 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1174 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1175 bool PROPAGATE_ON_CONTAINER_SWAP,
1176 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1177 bool IS_ALWAYS_EQUAL>
1178template <
class ELEMENT_TYPE,
class Args_01,
1193StdStatefulAllocator<TYPE,
1194 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1195 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1196 PROPAGATE_ON_CONTAINER_SWAP,
1197 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1198 IS_ALWAYS_EQUAL>::construct(
1199 ELEMENT_TYPE *address,
1214 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1231#if BSLTF_STDSTATEFULALLOCATOR_VARIADIC_LIMIT_B >= 14
1232template <
class TYPE,
1233 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1234 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1235 bool PROPAGATE_ON_CONTAINER_SWAP,
1236 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1237 bool IS_ALWAYS_EQUAL>
1238template <
class ELEMENT_TYPE,
class Args_01,
1254StdStatefulAllocator<TYPE,
1255 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1256 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1257 PROPAGATE_ON_CONTAINER_SWAP,
1258 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1259 IS_ALWAYS_EQUAL>::construct(
1260 ELEMENT_TYPE *address,
1276 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1297template <
class TYPE,
1298 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1299 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1300 bool PROPAGATE_ON_CONTAINER_SWAP,
1301 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1302 bool IS_ALWAYS_EQUAL>
1303template <
class ELEMENT_TYPE,
class... Args>
1306StdStatefulAllocator<TYPE,
1307 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1308 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1309 PROPAGATE_ON_CONTAINER_SWAP,
1310 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1311 IS_ALWAYS_EQUAL>::construct(
1312 ELEMENT_TYPE *address,
1315 ::new (
static_cast<void*
>(address)) ELEMENT_TYPE(
1321template <
class TYPE,
1322 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1323 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1324 bool PROPAGATE_ON_CONTAINER_SWAP,
1325 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1326 bool IS_ALWAYS_EQUAL>
1328void StdStatefulAllocator<TYPE,
1329 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1330 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1331 PROPAGATE_ON_CONTAINER_SWAP,
1332 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1339template <
class TYPE,
1340 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1341 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1342 bool PROPAGATE_ON_CONTAINER_SWAP,
1343 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1344 bool IS_ALWAYS_EQUAL>
1345template <
class ELEMENT_TYPE>
1347void StdStatefulAllocator<TYPE,
1348 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1349 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1350 PROPAGATE_ON_CONTAINER_SWAP,
1351 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1352 IS_ALWAYS_EQUAL>::destroy(
1353 ELEMENT_TYPE * address)
1355 address->~ELEMENT_TYPE();
1358template <
class TYPE,
1359 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1360 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1361 bool PROPAGATE_ON_CONTAINER_SWAP,
1362 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1363 bool IS_ALWAYS_EQUAL>
1365typename StdStatefulAllocator<
1367 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1368 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1369 PROPAGATE_ON_CONTAINER_SWAP,
1370 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1371 IS_ALWAYS_EQUAL>::size_type
1372StdStatefulAllocator<TYPE,
1373 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1374 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1375 PROPAGATE_ON_CONTAINER_SWAP,
1376 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1388 std::size_t>::value));
1390 static const std::size_t MAX_NUM_BYTES =
~std::size_t(0);
1391 static const std::size_t MAX_NUM_ELEMENTS =
1392 std::size_t(MAX_NUM_BYTES) /
sizeof(TYPE);
1393 return MAX_NUM_ELEMENTS;
1396template <
class TYPE,
1397 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1398 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1399 bool PROPAGATE_ON_CONTAINER_SWAP,
1400 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1401 bool IS_ALWAYS_EQUAL>
1403StdStatefulAllocator<TYPE,
1404 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1405 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1406 PROPAGATE_ON_CONTAINER_SWAP,
1407 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1409StdStatefulAllocator<TYPE,
1410 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1411 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1412 PROPAGATE_ON_CONTAINER_SWAP,
1413 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1415select_on_container_copy_construction()
const
1417 if (PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION) {
1426template <
class TYPE,
1427 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1428 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1429 bool PROPAGATE_ON_CONTAINER_SWAP,
1430 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1431 bool IS_ALWAYS_EQUAL>
1434StdStatefulAllocator<TYPE,
1435 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1436 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1437 PROPAGATE_ON_CONTAINER_SWAP,
1438 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1442 return d_allocator_p;
1448template <
class TYPE1,
1450 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1451 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1452 bool PROPAGATE_ON_CONTAINER_SWAP,
1453 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1454 bool IS_ALWAYS_EQUAL>
1458 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1459 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1460 PROPAGATE_ON_CONTAINER_SWAP,
1461 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1462 IS_ALWAYS_EQUAL>& lhs,
1463 const StdStatefulAllocator<
1465 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1466 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1467 PROPAGATE_ON_CONTAINER_SWAP,
1468 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1469 IS_ALWAYS_EQUAL>& rhs)
1471 return IS_ALWAYS_EQUAL || (
lhs.allocator() ==
rhs.allocator());
1474template <
class TYPE1,
1476 bool PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1477 bool PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1478 bool PROPAGATE_ON_CONTAINER_SWAP,
1479 bool PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1480 bool IS_ALWAYS_EQUAL>
1484 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1485 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1486 PROPAGATE_ON_CONTAINER_SWAP,
1487 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1488 IS_ALWAYS_EQUAL>& lhs,
1489 const StdStatefulAllocator<
1491 PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION,
1492 PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT,
1493 PROPAGATE_ON_CONTAINER_SWAP,
1494 PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT,
1495 IS_ALWAYS_EQUAL>& rhs)
1497 return !IS_ALWAYS_EQUAL && (
lhs.allocator() !=
rhs.allocator());
1503# error Not valid except when included from bsltf_stdstatefulallocator.h
#define BSLMF_NESTED_TRAIT_DECLARATION(t_TYPE, t_TRAIT)
Definition bslmf_nestedtraitdeclaration.h:231
Definition bslma_allocator.h:545
virtual void deallocate(void *address)=0
std::size_t size_type
Definition bslma_allocator.h:593
virtual void * allocate(size_type size)=0
std::ptrdiff_t difference_type
Definition bsltf_stdstatefulallocator.h:262
bslma::Allocator * allocator() const
Return the address of the allocator wrapped by this object.
Definition bsltf_stdstatefulallocator.h:657
bsl::integral_constant< bool, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT > propagate_on_container_move_assignment
Definition bsltf_stdstatefulallocator.h:276
StdStatefulAllocator select_on_container_copy_construction() const
Definition bsltf_stdstatefulallocator.h:632
TYPE * allocate(bslma::Allocator::size_type numElements)
Definition bsltf_stdstatefulallocator.h:504
bsl::integral_constant< bool, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT > propagate_on_container_copy_assignment
Definition bsltf_stdstatefulallocator.h:269
const TYPE * const_pointer
Definition bsltf_stdstatefulallocator.h:264
~StdStatefulAllocator()=default
std::size_t size_type
Definition bsltf_stdstatefulallocator.h:261
TYPE value_type
Definition bsltf_stdstatefulallocator.h:251
bsl::integral_constant< bool, PROPAGATE_ON_CONTAINER_SWAP > propagate_on_container_swap
Definition bsltf_stdstatefulallocator.h:272
void destroy(ELEMENT_TYPE *address)
Definition bsltf_stdstatefulallocator.h:569
void construct(ELEMENT_TYPE *address, Args &&... arguments)
Definition bsltf_stdstatefulallocator.h:530
StdStatefulAllocator & operator=(const StdStatefulAllocator &rhs)=default
bsl::integral_constant< bool, IS_ALWAYS_EQUAL > is_always_equal
Definition bsltf_stdstatefulallocator.h:280
void deallocate(TYPE *address, bslma::Allocator::size_type numElements)
Definition bsltf_stdstatefulallocator.h:551
StdStatefulAllocator(bslma::Allocator *allocator=0)
Definition bsltf_stdstatefulallocator.h:460
size_type max_size() const
Definition bsltf_stdstatefulallocator.h:595
TYPE * pointer
Definition bsltf_stdstatefulallocator.h:263
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
bool operator!=(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition baljsn_encoder_testtypes.h:76
Definition bsltf_allocargumenttype.h:92
bool operator!=(const AllocBitwiseMoveableTestType &lhs, const AllocBitwiseMoveableTestType &rhs)
bool operator==(const AllocBitwiseMoveableTestType &lhs, const AllocBitwiseMoveableTestType &rhs)
Definition bdldfp_decimal.h:5549
Definition bslmf_integralconstant.h:261
Definition bslmf_issame.h:146
static Allocator * defaultAllocator()
Definition bslma_default.h:905
Definition bslma_isstdallocator.h:202
StdStatefulAllocator< BDE_OTHER_TYPE, PROPAGATE_ON_CONTAINER_COPY_CONSTRUCTION, PROPAGATE_ON_CONTAINER_COPY_ASSIGNMENT, PROPAGATE_ON_CONTAINER_SWAP, PROPAGATE_ON_CONTAINER_MOVE_ASSIGNMENT, IS_ALWAYS_EQUAL > other
Definition bsltf_stdstatefulallocator.h:299