9#ifndef INCLUDED_BSLFMT_FORMAT_ARG
10#define INCLUDED_BSLFMT_FORMAT_ARG
108#include <bslscm_version.h>
137#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
143# define COMPILING_BSLFMT_FORMAT_ARG_H
145# undef COMPILING_BSLFMT_FORMAT_ARG_H
155template <
class t_CHAR>
156class basic_format_parse_context;
158template <
class t_OUT,
class t_CHAR>
159class basic_format_context;
161template <
class t_CONTEXT>
164template <
class t_VALUE>
182template <
class t_OUT,
class t_CHAR>
195 const void *d_value_p;
212 template <
class t_TYPE>
222 template <
class t_TYPE>
227#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
245 typedef typename BloombergLP::bsls::UnspecifiedBool<basic_format_arg>
247 typedef typename UnspecifiedBoolType::BoolType
BoolType;
254 typedef t_CHAR char_type;
292 template <
class t_TYPE>
304 template <class t_TYPE>
307 typename
bsl::enable_if<
bsl::is_integral<t_TYPE>::value &&
308 !
bsl::is_same<t_TYPE,
char>::value &&
309 !
bsl::is_same<t_TYPE,
wchar_t>::value &&
310 (sizeof(t_TYPE) <= sizeof(
long long)),
320 template <class t_TYPE>
323 typename
bsl::enable_if<(!
bsl::is_integral<t_TYPE>::value &&
324 !
bsl::is_same<t_TYPE,
long double>::value) ||
325 (sizeof(t_TYPE) > sizeof(
long long)),
341 template <class t_TYPE>
344 typename
bsl::enable_if<
bsl::is_same<t_TYPE,
long double>::value,
349 template <class t_TRAITS>
353#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
354#ifndef BSLSTL_STRING_VIEW_IS_ALIASED
357 template <
class t_TRAITS>
365 template <
class t_TRAITS,
class t_ALLOC>
371 template <
class t_TRAITS,
class t_ALLOC>
378 template <
class t_TRAITS,
class t_ALLOC>
384 template <
class t_TRAITS,
class t_ALLOC>
386 const std::basic_string<char_type, t_TRAITS, t_ALLOC>& value)
415#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
431#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
440#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
441 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
449 template <
class t_VISITOR>
450 decltype(
auto) visit(t_VISITOR&& visitor);
456 template <
class t_VISITOR>
466 lhs.d_value.swap(rhs.d_value);
474#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
487 template <
class t_CONTEXT,
class... t_FMTARGS>
490 t_FMTARGS&... fmt_args);
497#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
498 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
506template <
class t_VISITOR,
class t_CONTEXT>
515template <
class t_VISITOR,
class t_CONTEXT>
529template <
class t_OUT,
class t_CHAR>
530template <
class t_TYPE>
540 fc.
advance_to(f.format(*
static_cast<const t_TYPE *
>(value), fc));
544template <
class t_OUT,
class t_CHAR>
545template <
class t_TYPE>
547basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::handle::handle(
550, d_format_impl_p(format_impl<t_TYPE>)
555#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
556template <
class t_OUT,
class t_CHAR>
569template <
class t_OUT,
class t_CHAR>
575 d_format_impl_p(pc, fc, d_value_p);
584#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
585 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
588template <
class t_OUT,
class t_CHAR>
589template <
class t_VISITOR>
594 auto thisCopy(*
this);
595 return bsl::visit(std::forward<t_VISITOR>(v), thisCopy.d_value);
598template <
class t_OUT,
class t_CHAR>
599template <
class t_VISITOR>
610template <
class t_OUT,
class t_CHAR>
618template <
class t_OUT,
class t_CHAR>
620basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
626template <
class t_OUT,
class t_CHAR>
627template <
class t_TYPE>
629basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
635 static const std::ctype<wchar_t>& ct =
636 std::use_facet<std::ctype<wchar_t> >(std::locale::classic());
637 d_value = ct.widen(value);
640template <
class t_OUT,
class t_CHAR>
641template <
class t_TYPE>
643basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
648 (
sizeof(t_TYPE) <=
sizeof(
long long)),
651 if (
static_cast<t_TYPE
>(-1) <
static_cast<t_TYPE
>(0)) {
653 if (
sizeof(t_TYPE) <=
sizeof(
int)) {
654 d_value.template emplace<int>(
static_cast<int>(value));
657 d_value.template emplace<long long>(value);
662 if (
sizeof(t_TYPE) <=
sizeof(
int)) {
663 d_value.template emplace<unsigned int>(
664 static_cast<unsigned int>(value));
667 d_value.template emplace<unsigned long long>(value);
672template <
class t_OUT,
class t_CHAR>
673template <
class t_TYPE>
675basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
679 (
sizeof(t_TYPE) >
sizeof(
long long)),
681: d_value(handle(value))
685template <
class t_OUT,
class t_CHAR>
687basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
693template <
class t_OUT,
class t_CHAR>
695basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
701template <
class t_OUT,
class t_CHAR>
702template <
class t_TYPE>
704basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
708: d_value(
static_cast<long double>(value))
710#ifdef BSLS_COMPILERFEATURES_SUPPORT_STATIC_ASSERT
712 "long double not supported by bsl::format");
718template <
class t_OUT,
class t_CHAR>
719template <
class t_TRAITS>
721basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
727#ifdef BSLS_LIBRARYFEATURES_HAS_CPP17_BASELINE_LIBRARY
728#ifndef BSLSTL_STRING_VIEW_IS_ALIASED
729template <
class t_OUT,
class t_CHAR>
730template <
class t_TRAITS>
732basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
740template <
class t_OUT,
class t_CHAR>
741template <
class t_TRAITS,
class t_ALLOC>
743basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
749template <
class t_OUT,
class t_CHAR>
750template <
class t_TRAITS,
class t_ALLOC>
752basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
759template <
class t_OUT,
class t_CHAR>
760template <
class t_TRAITS,
class t_ALLOC>
762basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
768template <
class t_OUT,
class t_CHAR>
769template <
class t_TRAITS,
class t_ALLOC>
771basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
772 const std::basic_string<char_type, t_TRAITS, t_ALLOC>& value)
778template <
class t_OUT,
class t_CHAR>
780basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
782: d_value(
static_cast<const char_type *
>(value))
786template <
class t_OUT,
class t_CHAR>
788basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
794template <
class t_OUT,
class t_CHAR>
796basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
798: d_value(
static_cast<const void *
>(value))
802template <
class t_OUT,
class t_CHAR>
804basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
810template <
class t_OUT,
class t_CHAR>
812basic_format_arg<basic_format_context<t_OUT, t_CHAR> >::basic_format_arg(
815#if defined(BSLS_COMPILERFEATURES_SUPPORT_NULLPTR)
816: d_value(
static_cast<const void *
>(
nullptr))
818: d_value(
static_cast<const void *
>(0))
824template <
class t_OUT,
class t_CHAR>
831#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
832template <
class t_OUT,
class t_CHAR>
843template <
class t_OUT,
class t_CHAR>
848 return UnspecifiedBoolType::makeValue(
849 !bsl::holds_alternative<bsl::monostate>(d_value));
853#if !defined(BSLMF_MOVABLEREF_USES_RVALUE_REFERENCES)
854template <
class t_OUT,
class t_CHAR>
872#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
873template <
class t_CONTEXT,
class... t_FMTARGS>
877 t_FMTARGS&... fmt_args)
879#ifndef BSLS_COMPILERFEATURES_SUPPORT_GENERALIZED_INITIALIZERS
892#if defined(BSLS_LIBRARYFEATURES_HAS_CPP14_BASELINE_LIBRARY) && \
893 defined(BSLS_LIBRARYFEATURES_HAS_CPP14_INTEGER_SEQUENCE)
896template <
class t_VISITOR,
class t_CONTEXT>
901 return arg.visit(std::forward<t_VISITOR>(visitor));
904template <
class t_VISITOR,
class t_CONTEXT>
909 return arg.visit(visitor);
Definition bslstl_stringview.h:471
Definition bslstl_string.h:1252
Definition bslmf_invokeresult.h:362
Definition bslstl_variant.h:3806
Definition bslfmt_format_context.h:262
BloombergLP::bsls::UnspecifiedBool< basic_format_arg > UnspecifiedBoolType
Definition bslfmt_format_arg.h:246
friend void swap(basic_format_arg &lhs, basic_format_arg &rhs)
Exchange the values of the specified lhs and rhs.
Definition bslfmt_format_arg.h:464
UnspecifiedBoolType::BoolType BoolType
Definition bslfmt_format_arg.h:247
Definition bslfmt_format_context.h:316
void advance_to(iterator it)
Update the contained iterator to that specified by it.
Definition bslfmt_format_context.h:506
Definition bslfmt_formatparsecontext.h:86
BSLS_KEYWORD_CONSTEXPR_CPP20 void advance_to(const_iterator it)
Definition bslfmt_formatparsecontext.h:215
Definition bslmf_movableref.h:752
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#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
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
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