11#ifndef INCLUDED_BSLFMT_FORMAT_ARG_CPP03
12#define INCLUDED_BSLFMT_FORMAT_ARG_CPP03
63#ifdef COMPILING_BSLFMT_FORMAT_ARG_H
70template <
class t_CHAR>
71class basic_format_parse_context;
73template <
class t_OUT,
class t_CHAR>
74class basic_format_context;
76template <
class t_CONTEXT>
77class basic_format_arg;
79template <
class t_VALUE>
80class Format_ContextOutputIteratorRef;
84typedef basic_format_context<Format_ContextOutputIteratorRef<char>,
char>
87typedef basic_format_context<Format_ContextOutputIteratorRef<wchar_t>,
wchar_t>
97template <
class t_OUT,
class t_CHAR>
98class basic_format_arg<basic_format_context<t_OUT, t_CHAR> > {
110 const void *d_value_p;
113 void (*d_format_impl_p)(basic_format_parse_context<t_CHAR>&,
114 basic_format_context<t_OUT, t_CHAR>&,
119 friend class basic_format_arg<basic_format_context<t_OUT, t_CHAR> >;
127 template <
class t_TYPE>
128 static void format_impl(basic_format_parse_context<t_CHAR>& pc,
129 basic_format_context<t_OUT, t_CHAR>& fc,
137 template <
class t_TYPE>
142#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
156 void format(basic_format_parse_context<t_CHAR>& pc,
157 basic_format_context<t_OUT, t_CHAR>& fc)
const;
160 typedef typename BloombergLP::bsls::UnspecifiedBool<basic_format_arg>
162 typedef typename UnspecifiedBoolType::BoolType BoolType;
169 typedef t_CHAR char_type;
188 variant_type d_value;
191 friend class Format_ArgUtil;
207 template <
class t_TYPE>
208 explicit basic_format_arg(
219 template <class t_TYPE>
220 explicit basic_format_arg(
222 typename
bsl::enable_if<
bsl::is_integral<t_TYPE>::value &&
223 !
bsl::is_same<t_TYPE,
char>::value &&
224 !
bsl::is_same<t_TYPE,
wchar_t>::value &&
225 (sizeof(t_TYPE) <= sizeof(
long long)),
235 template <class t_TYPE>
236 explicit basic_format_arg(
238 typename
bsl::enable_if<(!
bsl::is_integral<t_TYPE>::value &&
239 !
bsl::is_same<t_TYPE,
long double>::value) ||
240 (sizeof(t_TYPE) > sizeof(
long long)),
256 template <class t_TYPE>
257 explicit basic_format_arg(
259 typename
bsl::enable_if<
bsl::is_same<t_TYPE,
long double>::value,
264 template <class t_TRAITS>
265 explicit basic_format_arg(
268#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
269#ifndef BSLSTL_STRING_VIEW_IS_ALIASED
272 template <
class t_TRAITS>
273 explicit basic_format_arg(
280 template <
class t_TRAITS,
class t_ALLOC>
286 template <
class t_TRAITS,
class t_ALLOC>
287 explicit basic_format_arg(
293 template <
class t_TRAITS,
class t_ALLOC>
294 explicit basic_format_arg(std::basic_string<char_type, t_TRAITS, t_ALLOC>&
299 template <
class t_TRAITS,
class t_ALLOC>
300 explicit basic_format_arg(
301 const std::basic_string<char_type, t_TRAITS, t_ALLOC>& value)
330#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
346#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
351 basic_format_arg &operator=(
355#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
356 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
364 template <
class t_VISITOR>
365 decltype(
auto)
visit(t_VISITOR&& visitor);
371 template <
class t_VISITOR>
379 friend void swap(basic_format_arg& lhs, basic_format_arg& rhs)
381 lhs.d_value.swap(
rhs.d_value);
389#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
392#ifndef BSLFMT_FORMAT_ARG_VARIADIC_LIMIT
393#define BSLFMT_FORMAT_ARG_VARIADIC_LIMIT 10
395#ifndef BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A
396#define BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A BSLFMT_FORMAT_ARG_VARIADIC_LIMIT
398class Format_ArgUtil {
401#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 0
402 template <
class t_CONTEXT>
404 bsl::array<basic_format_arg<t_CONTEXT>, 0u> *out);
407#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 1
408 template <
class t_CONTEXT,
class t_FMTARGS_01>
410 bsl::array<basic_format_arg<t_CONTEXT>, 1u> *out,
411 t_FMTARGS_01& fmt_args_01);
414#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 2
415 template <
class t_CONTEXT,
class t_FMTARGS_01,
418 bsl::array<basic_format_arg<t_CONTEXT>, 2u> *out,
419 t_FMTARGS_01& fmt_args_01,
420 t_FMTARGS_02& fmt_args_02);
423#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 3
424 template <
class t_CONTEXT,
class t_FMTARGS_01,
428 bsl::array<basic_format_arg<t_CONTEXT>, 3u> *out,
429 t_FMTARGS_01& fmt_args_01,
430 t_FMTARGS_02& fmt_args_02,
431 t_FMTARGS_03& fmt_args_03);
434#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 4
435 template <
class t_CONTEXT,
class t_FMTARGS_01,
440 bsl::array<basic_format_arg<t_CONTEXT>, 4u> *out,
441 t_FMTARGS_01& fmt_args_01,
442 t_FMTARGS_02& fmt_args_02,
443 t_FMTARGS_03& fmt_args_03,
444 t_FMTARGS_04& fmt_args_04);
447#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 5
448 template <
class t_CONTEXT,
class t_FMTARGS_01,
454 bsl::array<basic_format_arg<t_CONTEXT>, 5u> *out,
455 t_FMTARGS_01& fmt_args_01,
456 t_FMTARGS_02& fmt_args_02,
457 t_FMTARGS_03& fmt_args_03,
458 t_FMTARGS_04& fmt_args_04,
459 t_FMTARGS_05& fmt_args_05);
462#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 6
463 template <
class t_CONTEXT,
class t_FMTARGS_01,
470 bsl::array<basic_format_arg<t_CONTEXT>, 6u> *out,
471 t_FMTARGS_01& fmt_args_01,
472 t_FMTARGS_02& fmt_args_02,
473 t_FMTARGS_03& fmt_args_03,
474 t_FMTARGS_04& fmt_args_04,
475 t_FMTARGS_05& fmt_args_05,
476 t_FMTARGS_06& fmt_args_06);
479#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 7
480 template <
class t_CONTEXT,
class t_FMTARGS_01,
488 bsl::array<basic_format_arg<t_CONTEXT>, 7u> *out,
489 t_FMTARGS_01& fmt_args_01,
490 t_FMTARGS_02& fmt_args_02,
491 t_FMTARGS_03& fmt_args_03,
492 t_FMTARGS_04& fmt_args_04,
493 t_FMTARGS_05& fmt_args_05,
494 t_FMTARGS_06& fmt_args_06,
495 t_FMTARGS_07& fmt_args_07);
498#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 8
499 template <
class t_CONTEXT,
class t_FMTARGS_01,
508 bsl::array<basic_format_arg<t_CONTEXT>, 8u> *out,
509 t_FMTARGS_01& fmt_args_01,
510 t_FMTARGS_02& fmt_args_02,
511 t_FMTARGS_03& fmt_args_03,
512 t_FMTARGS_04& fmt_args_04,
513 t_FMTARGS_05& fmt_args_05,
514 t_FMTARGS_06& fmt_args_06,
515 t_FMTARGS_07& fmt_args_07,
516 t_FMTARGS_08& fmt_args_08);
519#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 9
520 template <
class t_CONTEXT,
class t_FMTARGS_01,
530 bsl::array<basic_format_arg<t_CONTEXT>, 9u> *out,
531 t_FMTARGS_01& fmt_args_01,
532 t_FMTARGS_02& fmt_args_02,
533 t_FMTARGS_03& fmt_args_03,
534 t_FMTARGS_04& fmt_args_04,
535 t_FMTARGS_05& fmt_args_05,
536 t_FMTARGS_06& fmt_args_06,
537 t_FMTARGS_07& fmt_args_07,
538 t_FMTARGS_08& fmt_args_08,
539 t_FMTARGS_09& fmt_args_09);
542#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_A >= 10
543 template <
class t_CONTEXT,
class t_FMTARGS_01,
554 bsl::array<basic_format_arg<t_CONTEXT>, 10u> *out,
555 t_FMTARGS_01& fmt_args_01,
556 t_FMTARGS_02& fmt_args_02,
557 t_FMTARGS_03& fmt_args_03,
558 t_FMTARGS_04& fmt_args_04,
559 t_FMTARGS_05& fmt_args_05,
560 t_FMTARGS_06& fmt_args_06,
561 t_FMTARGS_07& fmt_args_07,
562 t_FMTARGS_08& fmt_args_08,
563 t_FMTARGS_09& fmt_args_09,
564 t_FMTARGS_10& fmt_args_10);
571class Format_ArgUtil {
574 template <
class t_CONTEXT,
class... t_FMTARGS>
576 bsl::array<basic_format_arg<t_CONTEXT>,
sizeof...(t_FMTARGS)> *out,
577 t_FMTARGS&... fmt_args);
585#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
586 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
594template <
class t_VISITOR,
class t_CONTEXT>
596 basic_format_arg<t_CONTEXT> arg);
603template <
class t_VISITOR,
class t_CONTEXT>
617template <
class t_OUT,
class t_CHAR>
618template <
class t_TYPE>
621basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::handle::format_impl(
622 basic_format_parse_context<t_CHAR>& pc,
623 basic_format_context<t_OUT, t_CHAR>& fc,
627 pc.advance_to(f.parse(pc));
628 fc.advance_to(f.format(*
static_cast<const t_TYPE *
>(value), fc));
632template <
class t_OUT,
class t_CHAR>
633template <
class t_TYPE>
635basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::handle::handle(
638, d_format_impl_p(format_impl<t_TYPE>)
643#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
644template <
class t_OUT,
class t_CHAR>
646basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::handle::handle(
657template <
class t_OUT,
class t_CHAR>
659void basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::handle::format(
660 basic_format_parse_context<t_CHAR>& pc,
661 basic_format_context<t_OUT, t_CHAR>& fc)
const
663 d_format_impl_p(pc, fc, d_value_p);
672#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
673 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
676template <
class t_OUT,
class t_CHAR>
677template <
class t_VISITOR>
679decltype(
auto) basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::visit(
682 auto thisCopy(*
this);
683 return bsl::visit(std::forward<t_VISITOR>(v), thisCopy.d_value);
686template <
class t_OUT,
class t_CHAR>
687template <
class t_VISITOR>
690basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::visit(t_VISITOR& v)
692 basic_format_arg thisCopy(*
this);
698template <
class t_OUT,
class t_CHAR>
700basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
706template <
class t_OUT,
class t_CHAR>
708basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
714template <
class t_OUT,
class t_CHAR>
715template <
class t_TYPE>
717basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
723 static const std::ctype<wchar_t>& ct =
724 std::use_facet<std::ctype<wchar_t> >(std::locale::classic());
725 d_value = ct.widen(value);
728template <
class t_OUT,
class t_CHAR>
729template <
class t_TYPE>
731basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
736 (
sizeof(t_TYPE) <=
sizeof(
long long)),
739 if (
static_cast<t_TYPE
>(-1) <
static_cast<t_TYPE
>(0)) {
741 if (
sizeof(t_TYPE) <=
sizeof(
int)) {
742 d_value.template emplace<int>(
static_cast<int>(value));
745 d_value.template emplace<long long>(value);
750 if (
sizeof(t_TYPE) <=
sizeof(
int)) {
751 d_value.template emplace<unsigned int>(
752 static_cast<unsigned int>(value));
755 d_value.template emplace<unsigned long long>(value);
760template <
class t_OUT,
class t_CHAR>
761template <
class t_TYPE>
763basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
767 (
sizeof(t_TYPE) >
sizeof(
long long)),
769: d_value(handle(value))
773template <
class t_OUT,
class t_CHAR>
775basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
781template <
class t_OUT,
class t_CHAR>
783basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
789template <
class t_OUT,
class t_CHAR>
790template <
class t_TYPE>
792basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
796: d_value(
static_cast<long double>(value))
798#ifdef BSLS_COMPILERFEATURES_SUPPORT_STATIC_ASSERT
800 "long double not supported by bsl::format");
806template <
class t_OUT,
class t_CHAR>
807template <
class t_TRAITS>
809basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
815#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
816#ifndef BSLSTL_STRING_VIEW_IS_ALIASED
817template <
class t_OUT,
class t_CHAR>
818template <
class t_TRAITS>
820basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
828template <
class t_OUT,
class t_CHAR>
829template <
class t_TRAITS,
class t_ALLOC>
831basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
837template <
class t_OUT,
class t_CHAR>
838template <
class t_TRAITS,
class t_ALLOC>
840basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
847template <
class t_OUT,
class t_CHAR>
848template <
class t_TRAITS,
class t_ALLOC>
850basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
856template <
class t_OUT,
class t_CHAR>
857template <
class t_TRAITS,
class t_ALLOC>
859basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
860 const std::basic_string<char_type, t_TRAITS, t_ALLOC>& value)
866template <
class t_OUT,
class t_CHAR>
868basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
870: d_value(
static_cast<const char_type *
>(value))
874template <
class t_OUT,
class t_CHAR>
876basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
882template <
class t_OUT,
class t_CHAR>
884basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
886: d_value(
static_cast<const void *
>(value))
890template <
class t_OUT,
class t_CHAR>
892basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
898template <
class t_OUT,
class t_CHAR>
900basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
903#if defined(BSLS_COMPILERFEATURES_SUPPORT_NULLPTR)
904: d_value(
static_cast<const void *
>(
nullptr))
906: d_value(
static_cast<const void *
>(0))
912template <
class t_OUT,
class t_CHAR>
914basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg()
919#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
920template <
class t_OUT,
class t_CHAR>
922basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
931template <
class t_OUT,
class t_CHAR>
933basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::operator BoolType()
936 return UnspecifiedBoolType::makeValue(
937 !bsl::holds_alternative<bsl::monostate>(d_value));
941#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
942template <
class t_OUT,
class t_CHAR>
944basic_format_arg<basic_format_context<t_OUT, t_CHAR> > &
945basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::operator=(
960#if BSLS_COMPILERFEATURES_SIMULATE_VARIADIC_TEMPLATES
963#ifndef BSLFMT_FORMAT_ARG_VARIADIC_LIMIT
964#define BSLFMT_FORMAT_ARG_VARIADIC_LIMIT 10
966#ifndef BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B
967#define BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B BSLFMT_FORMAT_ARG_VARIADIC_LIMIT
969#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 0
970template <
class t_CONTEXT>
973 bsl::array<basic_format_arg<t_CONTEXT>, 0u> *out)
975#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
985#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 1
986template <
class t_CONTEXT,
class t_FMTARGS_01>
989 bsl::array<basic_format_arg<t_CONTEXT>, 1u> *out,
990 t_FMTARGS_01& fmt_args_01)
992#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
994 {basic_format_arg<t_CONTEXT>(fmt_args_01)}};
997 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01)} };
1002#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 2
1003template <
class t_CONTEXT,
class t_FMTARGS_01,
1007 bsl::array<basic_format_arg<t_CONTEXT>, 2u> *out,
1008 t_FMTARGS_01& fmt_args_01,
1009 t_FMTARGS_02& fmt_args_02)
1011#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1013 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1014 basic_format_arg<t_CONTEXT>(fmt_args_02)}};
1017 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1018 basic_format_arg<t_CONTEXT>(fmt_args_02)} };
1023#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 3
1024template <
class t_CONTEXT,
class t_FMTARGS_01,
1029 bsl::array<basic_format_arg<t_CONTEXT>, 3u> *out,
1030 t_FMTARGS_01& fmt_args_01,
1031 t_FMTARGS_02& fmt_args_02,
1032 t_FMTARGS_03& fmt_args_03)
1034#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1036 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1037 basic_format_arg<t_CONTEXT>(fmt_args_02),
1038 basic_format_arg<t_CONTEXT>(fmt_args_03)}};
1041 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1042 basic_format_arg<t_CONTEXT>(fmt_args_02),
1043 basic_format_arg<t_CONTEXT>(fmt_args_03)} };
1048#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 4
1049template <
class t_CONTEXT,
class t_FMTARGS_01,
1055 bsl::array<basic_format_arg<t_CONTEXT>, 4u> *out,
1056 t_FMTARGS_01& fmt_args_01,
1057 t_FMTARGS_02& fmt_args_02,
1058 t_FMTARGS_03& fmt_args_03,
1059 t_FMTARGS_04& fmt_args_04)
1061#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1063 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1064 basic_format_arg<t_CONTEXT>(fmt_args_02),
1065 basic_format_arg<t_CONTEXT>(fmt_args_03),
1066 basic_format_arg<t_CONTEXT>(fmt_args_04)}};
1069 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1070 basic_format_arg<t_CONTEXT>(fmt_args_02),
1071 basic_format_arg<t_CONTEXT>(fmt_args_03),
1072 basic_format_arg<t_CONTEXT>(fmt_args_04)} };
1077#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 5
1078template <
class t_CONTEXT,
class t_FMTARGS_01,
1085 bsl::array<basic_format_arg<t_CONTEXT>, 5u> *out,
1086 t_FMTARGS_01& fmt_args_01,
1087 t_FMTARGS_02& fmt_args_02,
1088 t_FMTARGS_03& fmt_args_03,
1089 t_FMTARGS_04& fmt_args_04,
1090 t_FMTARGS_05& fmt_args_05)
1092#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1094 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1095 basic_format_arg<t_CONTEXT>(fmt_args_02),
1096 basic_format_arg<t_CONTEXT>(fmt_args_03),
1097 basic_format_arg<t_CONTEXT>(fmt_args_04),
1098 basic_format_arg<t_CONTEXT>(fmt_args_05)}};
1101 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1102 basic_format_arg<t_CONTEXT>(fmt_args_02),
1103 basic_format_arg<t_CONTEXT>(fmt_args_03),
1104 basic_format_arg<t_CONTEXT>(fmt_args_04),
1105 basic_format_arg<t_CONTEXT>(fmt_args_05)} };
1110#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 6
1111template <
class t_CONTEXT,
class t_FMTARGS_01,
1119 bsl::array<basic_format_arg<t_CONTEXT>, 6u> *out,
1120 t_FMTARGS_01& fmt_args_01,
1121 t_FMTARGS_02& fmt_args_02,
1122 t_FMTARGS_03& fmt_args_03,
1123 t_FMTARGS_04& fmt_args_04,
1124 t_FMTARGS_05& fmt_args_05,
1125 t_FMTARGS_06& fmt_args_06)
1127#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1129 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1130 basic_format_arg<t_CONTEXT>(fmt_args_02),
1131 basic_format_arg<t_CONTEXT>(fmt_args_03),
1132 basic_format_arg<t_CONTEXT>(fmt_args_04),
1133 basic_format_arg<t_CONTEXT>(fmt_args_05),
1134 basic_format_arg<t_CONTEXT>(fmt_args_06)}};
1137 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1138 basic_format_arg<t_CONTEXT>(fmt_args_02),
1139 basic_format_arg<t_CONTEXT>(fmt_args_03),
1140 basic_format_arg<t_CONTEXT>(fmt_args_04),
1141 basic_format_arg<t_CONTEXT>(fmt_args_05),
1142 basic_format_arg<t_CONTEXT>(fmt_args_06)} };
1147#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 7
1148template <
class t_CONTEXT,
class t_FMTARGS_01,
1157 bsl::array<basic_format_arg<t_CONTEXT>, 7u> *out,
1158 t_FMTARGS_01& fmt_args_01,
1159 t_FMTARGS_02& fmt_args_02,
1160 t_FMTARGS_03& fmt_args_03,
1161 t_FMTARGS_04& fmt_args_04,
1162 t_FMTARGS_05& fmt_args_05,
1163 t_FMTARGS_06& fmt_args_06,
1164 t_FMTARGS_07& fmt_args_07)
1166#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1168 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1169 basic_format_arg<t_CONTEXT>(fmt_args_02),
1170 basic_format_arg<t_CONTEXT>(fmt_args_03),
1171 basic_format_arg<t_CONTEXT>(fmt_args_04),
1172 basic_format_arg<t_CONTEXT>(fmt_args_05),
1173 basic_format_arg<t_CONTEXT>(fmt_args_06),
1174 basic_format_arg<t_CONTEXT>(fmt_args_07)}};
1177 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1178 basic_format_arg<t_CONTEXT>(fmt_args_02),
1179 basic_format_arg<t_CONTEXT>(fmt_args_03),
1180 basic_format_arg<t_CONTEXT>(fmt_args_04),
1181 basic_format_arg<t_CONTEXT>(fmt_args_05),
1182 basic_format_arg<t_CONTEXT>(fmt_args_06),
1183 basic_format_arg<t_CONTEXT>(fmt_args_07)} };
1188#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 8
1189template <
class t_CONTEXT,
class t_FMTARGS_01,
1199 bsl::array<basic_format_arg<t_CONTEXT>, 8u> *out,
1200 t_FMTARGS_01& fmt_args_01,
1201 t_FMTARGS_02& fmt_args_02,
1202 t_FMTARGS_03& fmt_args_03,
1203 t_FMTARGS_04& fmt_args_04,
1204 t_FMTARGS_05& fmt_args_05,
1205 t_FMTARGS_06& fmt_args_06,
1206 t_FMTARGS_07& fmt_args_07,
1207 t_FMTARGS_08& fmt_args_08)
1209#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1211 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1212 basic_format_arg<t_CONTEXT>(fmt_args_02),
1213 basic_format_arg<t_CONTEXT>(fmt_args_03),
1214 basic_format_arg<t_CONTEXT>(fmt_args_04),
1215 basic_format_arg<t_CONTEXT>(fmt_args_05),
1216 basic_format_arg<t_CONTEXT>(fmt_args_06),
1217 basic_format_arg<t_CONTEXT>(fmt_args_07),
1218 basic_format_arg<t_CONTEXT>(fmt_args_08)}};
1221 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1222 basic_format_arg<t_CONTEXT>(fmt_args_02),
1223 basic_format_arg<t_CONTEXT>(fmt_args_03),
1224 basic_format_arg<t_CONTEXT>(fmt_args_04),
1225 basic_format_arg<t_CONTEXT>(fmt_args_05),
1226 basic_format_arg<t_CONTEXT>(fmt_args_06),
1227 basic_format_arg<t_CONTEXT>(fmt_args_07),
1228 basic_format_arg<t_CONTEXT>(fmt_args_08)} };
1233#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 9
1234template <
class t_CONTEXT,
class t_FMTARGS_01,
1245 bsl::array<basic_format_arg<t_CONTEXT>, 9u> *out,
1246 t_FMTARGS_01& fmt_args_01,
1247 t_FMTARGS_02& fmt_args_02,
1248 t_FMTARGS_03& fmt_args_03,
1249 t_FMTARGS_04& fmt_args_04,
1250 t_FMTARGS_05& fmt_args_05,
1251 t_FMTARGS_06& fmt_args_06,
1252 t_FMTARGS_07& fmt_args_07,
1253 t_FMTARGS_08& fmt_args_08,
1254 t_FMTARGS_09& fmt_args_09)
1256#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1258 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1259 basic_format_arg<t_CONTEXT>(fmt_args_02),
1260 basic_format_arg<t_CONTEXT>(fmt_args_03),
1261 basic_format_arg<t_CONTEXT>(fmt_args_04),
1262 basic_format_arg<t_CONTEXT>(fmt_args_05),
1263 basic_format_arg<t_CONTEXT>(fmt_args_06),
1264 basic_format_arg<t_CONTEXT>(fmt_args_07),
1265 basic_format_arg<t_CONTEXT>(fmt_args_08),
1266 basic_format_arg<t_CONTEXT>(fmt_args_09)}};
1269 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1270 basic_format_arg<t_CONTEXT>(fmt_args_02),
1271 basic_format_arg<t_CONTEXT>(fmt_args_03),
1272 basic_format_arg<t_CONTEXT>(fmt_args_04),
1273 basic_format_arg<t_CONTEXT>(fmt_args_05),
1274 basic_format_arg<t_CONTEXT>(fmt_args_06),
1275 basic_format_arg<t_CONTEXT>(fmt_args_07),
1276 basic_format_arg<t_CONTEXT>(fmt_args_08),
1277 basic_format_arg<t_CONTEXT>(fmt_args_09)} };
1282#if BSLFMT_FORMAT_ARG_VARIADIC_LIMIT_B >= 10
1283template <
class t_CONTEXT,
class t_FMTARGS_01,
1295 bsl::array<basic_format_arg<t_CONTEXT>, 10u> *out,
1296 t_FMTARGS_01& fmt_args_01,
1297 t_FMTARGS_02& fmt_args_02,
1298 t_FMTARGS_03& fmt_args_03,
1299 t_FMTARGS_04& fmt_args_04,
1300 t_FMTARGS_05& fmt_args_05,
1301 t_FMTARGS_06& fmt_args_06,
1302 t_FMTARGS_07& fmt_args_07,
1303 t_FMTARGS_08& fmt_args_08,
1304 t_FMTARGS_09& fmt_args_09,
1305 t_FMTARGS_10& fmt_args_10)
1307#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1309 {basic_format_arg<t_CONTEXT>(fmt_args_01),
1310 basic_format_arg<t_CONTEXT>(fmt_args_02),
1311 basic_format_arg<t_CONTEXT>(fmt_args_03),
1312 basic_format_arg<t_CONTEXT>(fmt_args_04),
1313 basic_format_arg<t_CONTEXT>(fmt_args_05),
1314 basic_format_arg<t_CONTEXT>(fmt_args_06),
1315 basic_format_arg<t_CONTEXT>(fmt_args_07),
1316 basic_format_arg<t_CONTEXT>(fmt_args_08),
1317 basic_format_arg<t_CONTEXT>(fmt_args_09),
1318 basic_format_arg<t_CONTEXT>(fmt_args_10)}};
1321 *out = { {basic_format_arg<t_CONTEXT>(fmt_args_01),
1322 basic_format_arg<t_CONTEXT>(fmt_args_02),
1323 basic_format_arg<t_CONTEXT>(fmt_args_03),
1324 basic_format_arg<t_CONTEXT>(fmt_args_04),
1325 basic_format_arg<t_CONTEXT>(fmt_args_05),
1326 basic_format_arg<t_CONTEXT>(fmt_args_06),
1327 basic_format_arg<t_CONTEXT>(fmt_args_07),
1328 basic_format_arg<t_CONTEXT>(fmt_args_08),
1329 basic_format_arg<t_CONTEXT>(fmt_args_09),
1330 basic_format_arg<t_CONTEXT>(fmt_args_10)} };
1338template <
class t_CONTEXT,
class... t_FMTARGS>
1341 bsl::array<basic_format_arg<t_CONTEXT>,
sizeof...(t_FMTARGS)> *out,
1342 t_FMTARGS&... fmt_args)
1344#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
1346 {basic_format_arg<t_CONTEXT>(fmt_args)...}};
1349 *out = { {basic_format_arg<t_CONTEXT>(fmt_args)...} };
1357#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
1358 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
1361template <
class t_VISITOR,
class t_CONTEXT>
1364 basic_format_arg<t_CONTEXT> arg)
1366 return arg.visit(std::forward<t_VISITOR>(visitor));
1369template <
class t_VISITOR,
class t_CONTEXT>
1374 return arg.visit(visitor);
1382# error Not valid except when included from bslfmt_format_arg.h
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
Definition bslmf_invokeresult.h:362
Definition bslstl_variant.h:3806
Definition bslmf_movableref.h:752
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_KEYWORD_DELETED
Definition bsls_keyword.h:651
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
#define BSLS_UTIL_ADDRESSOF(OBJ)
Definition bsls_util.h:296
bool operator==(const FileCleanerConfiguration &lhs, const FileCleanerConfiguration &rhs)
void swap(OptionValue &a, OptionValue &b)
Definition bdlat_valuetypefunctions.h:939
BloombergLP::bsls::Nullptr_Impl::Type nullptr_t
Definition bsls_nullptr.h:283
bsl::invoke_result< t_VISITOR &, typenamebsl::variant_alternative< 0, t_VARIANT >::type & >::type visit(t_VISITOR &visitor, t_VARIANT &variant)
Definition bslstl_variant.h:2359
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslfmt_enablestreamedformatter.h:130
basic_format_context< Format_ContextOutputIteratorRef< char >, char > format_context
Definition bslfmt_format_arg.h:170
bsl::invoke_result< t_VISITOR &, bsl::monostate & >::type visit_format_arg(t_VISITOR &visitor, basic_format_arg< t_CONTEXT > arg)
Definition bslfmt_format_arg.h:907
basic_format_context< Format_ContextOutputIteratorRef< wchar_t >, wchar_t > wformat_context
Definition bslfmt_format_arg.h:173
bsl::string format(BSLFMT_FORMAT_STRING_PARAMETER fmtStr, const t_ARGS &... args)
Definition bslfmt_format_imp.h:1085
Definition bslstl_array.h:293
Definition bslmf_enableif.h:530
Definition bslmf_isintegral.h:140
Definition bslmf_issame.h:146
Definition bslstl_monostate.h:77
static MovableRef< t_TYPE > move(t_TYPE &reference) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1067
static t_TYPE & access(t_TYPE &ref) BSLS_KEYWORD_NOEXCEPT
Definition bslmf_movableref.h:1039