16 #include <type_traits> 19 #define FMT_VERSION 50300 22 # define FMT_HAS_FEATURE(x) __has_feature(x) 24 # define FMT_HAS_FEATURE(x) 0 27 #if defined(__has_include) && !defined(__INTELLISENSE__) && \ 28 !(defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1600) 29 # define FMT_HAS_INCLUDE(x) __has_include(x) 31 # define FMT_HAS_INCLUDE(x) 0 34 #ifdef __has_cpp_attribute 35 # define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) 37 # define FMT_HAS_CPP_ATTRIBUTE(x) 0 40 #if defined(__GNUC__) && !defined(__clang__) 41 # define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) 43 # define FMT_GCC_VERSION 0 46 #if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) 47 # define FMT_HAS_GXX_CXX11 FMT_GCC_VERSION 49 # define FMT_HAS_GXX_CXX11 0 53 # define FMT_MSC_VER _MSC_VER 55 # define FMT_MSC_VER 0 60 #ifndef FMT_USE_CONSTEXPR 61 # define FMT_USE_CONSTEXPR \ 62 (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VER >= 1910 || \ 63 (FMT_GCC_VERSION >= 600 && __cplusplus >= 201402L)) 66 # define FMT_CONSTEXPR constexpr 67 # define FMT_CONSTEXPR_DECL constexpr 69 # define FMT_CONSTEXPR inline 70 # define FMT_CONSTEXPR_DECL 73 #ifndef FMT_USE_CONSTEXPR11 74 # define FMT_USE_CONSTEXPR11 \ 75 (FMT_USE_CONSTEXPR || FMT_GCC_VERSION >= 406 || FMT_MSC_VER >= 1900) 77 #if FMT_USE_CONSTEXPR11 78 # define FMT_CONSTEXPR11 constexpr 80 # define FMT_CONSTEXPR11 84 # if FMT_HAS_FEATURE(cxx_override) || \ 85 (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 86 # define FMT_OVERRIDE override 92 #if FMT_HAS_FEATURE(cxx_explicit_conversions) || \ 93 FMT_GCC_VERSION >= 405 || FMT_MSC_VER >= 1800 94 # define FMT_USE_EXPLICIT 1 95 # define FMT_EXPLICIT explicit 97 # define FMT_USE_EXPLICIT 0 102 # if FMT_HAS_FEATURE(cxx_nullptr) || \ 103 (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1600 104 # define FMT_NULL nullptr 105 # define FMT_USE_NULLPTR 1 107 # define FMT_NULL NULL 110 #ifndef FMT_USE_NULLPTR 111 # define FMT_USE_NULLPTR 0 115 #ifndef FMT_EXCEPTIONS 116 # if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ 117 FMT_MSC_VER && !_HAS_EXCEPTIONS 118 # define FMT_EXCEPTIONS 0 120 # define FMT_EXCEPTIONS 1 125 #ifndef FMT_USE_NOEXCEPT 126 # define FMT_USE_NOEXCEPT 0 129 #if FMT_USE_NOEXCEPT || FMT_HAS_FEATURE(cxx_noexcept) || \ 130 (FMT_GCC_VERSION >= 408 && FMT_HAS_GXX_CXX11) || FMT_MSC_VER >= 1900 131 # define FMT_DETECTED_NOEXCEPT noexcept 132 # define FMT_HAS_CXX11_NOEXCEPT 1 134 # define FMT_DETECTED_NOEXCEPT throw() 135 # define FMT_HAS_CXX11_NOEXCEPT 0 139 # if FMT_EXCEPTIONS || FMT_HAS_CXX11_NOEXCEPT 140 # define FMT_NOEXCEPT FMT_DETECTED_NOEXCEPT 142 # define FMT_NOEXCEPT 146 #ifndef FMT_BEGIN_NAMESPACE 147 # if FMT_HAS_FEATURE(cxx_inline_namespaces) || FMT_GCC_VERSION >= 404 || \ 149 # define FMT_INLINE_NAMESPACE inline namespace 150 # define FMT_END_NAMESPACE }} 152 # define FMT_INLINE_NAMESPACE namespace 153 # define FMT_END_NAMESPACE } using namespace v5; } 155 # define FMT_BEGIN_NAMESPACE namespace fmt { FMT_INLINE_NAMESPACE v5 { 158 #if !defined(FMT_HEADER_ONLY) && defined(_WIN32) 160 # define FMT_API __declspec(dllexport) 161 # elif defined(FMT_SHARED) 162 # define FMT_API __declspec(dllimport) 170 # define FMT_ASSERT(condition, message) assert((condition) && message) 174 #if (FMT_HAS_INCLUDE(<string_view>) && \ 175 (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ 176 (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) 177 # include <string_view> 178 # define FMT_STRING_VIEW std::basic_string_view 179 #elif FMT_HAS_INCLUDE(<experimental/string_view>) && __cplusplus >= 201402L 180 # include <experimental/string_view> 181 # define FMT_STRING_VIEW std::experimental::basic_string_view 185 #if FMT_GCC_VERSION && FMT_GCC_VERSION <= 404 186 # include <functional> 193 template <
typename T>
199 template <
typename F,
typename... Args>
202 typedef typename std::result_of<
207 template <
typename Int>
214 template <
typename T>
229 FMT_NOEXCEPT: ptr_(
p), size_(sz), capacity_(cap) {}
232 void set(
T *buf_data, std::size_t buf_capacity) FMT_NOEXCEPT {
234 capacity_ = buf_capacity;
238 virtual void grow(std::size_t capacity) = 0;
247 T *
end() FMT_NOEXCEPT {
return ptr_ + size_; }
256 T *
data() FMT_NOEXCEPT {
return ptr_; }
274 if (new_capacity > capacity_)
280 ptr_[size_++] =
value;
284 template <
typename U>
295 template <
typename Container>
302 container_.resize(capacity);
303 this->
set(&container_[0], capacity);
312 template <
typename Container>
314 typedef std::back_insert_iterator<Container> bi_iterator;
315 struct accessor: bi_iterator {
316 accessor(bi_iterator iter) : bi_iterator(iter) {}
317 using bi_iterator::container;
319 return *accessor(it).container;
330 template <
typename T>
334 #if FMT_GCC_VERSION && FMT_GCC_VERSION < 405 335 template <
typename...
T>
338 template <
typename...
T>
349 template <
typename Char>
363 : data_(
s), size_(count) {}
372 : data_(s), size_(
std::char_traits<Char>::length(s)) {}
375 template <
typename Alloc>
380 #ifdef FMT_STRING_VIEW 382 : data_(s.data()), size_(s.size()) {}
401 size_t str_size = size_ < other.
size_ ? size_ : other.
size_;
404 result = size_ == other.
size_ ? 0 : (size_ < other.
size_ ? -1 : 1);
453 template <
typename Char>
457 template <
typename Char>
461 template <
typename Char>
464 #ifdef FMT_STRING_VIEW 465 template <
typename Char>
474 template <
typename S>
483 template <
typename Context>
486 template <
typename Context>
490 template <
typename T,
typename Char =
char,
typename Enable =
void>
493 "don't know how to format the type, include fmt/ostream.h if it provides " 494 "an operator<< that should be used");
497 template <
typename ParseContext>
499 template <
typename FormatContext>
500 auto format(
const T &
val, FormatContext &ctx) -> decltype(ctx.out());
503 template <
typename T,
typename Char,
typename Enable =
void>
505 bool, !std::is_arithmetic<T>::value && std::is_convertible<T, int>::value> {};
514 template <
typename S>
515 struct is_string : std::integral_constant<bool, !std::is_same<
516 dummy_string_view, decltype(to_string_view(declval<S>()))>::value> {};
518 template <
typename S>
524 template <typename Char>
527 template <typename
T, typename Char>
550 template <
typename Char>
556 template <
typename Context>
563 template <
typename Context>
591 "incompatible string types");
596 "incompatible string types");
600 string.value = val.
data();
601 string.size = val.
size();
605 template <
typename T>
608 custom.format = &format_custom_arg<T>;
617 template <
typename T>
623 auto &&parse_ctx = ctx.parse_context();
624 parse_ctx.advance_to(f.parse(parse_ctx));
625 ctx.advance_to(f.format(*static_cast<const T*>(arg), ctx));
630 template <
typename Context,
typename T, type TYPE>
633 static const type type_tag = TYPE;
639 template <
typename Context,
typename T>
642 #define FMT_MAKE_VALUE(TAG, ArgType, ValueType) \ 643 template <typename C> \ 644 FMT_CONSTEXPR init<C, ValueType, TAG> make_value(ArgType val) { \ 645 return static_cast<ValueType>(val); \ 648 #define FMT_MAKE_VALUE_SAME(TAG, Type) \ 649 template <typename C> \ 650 FMT_CONSTEXPR init<C, Type, TAG> make_value(Type val) { return val; } 660 typedef
std::conditional<sizeof(
long) == sizeof(
int),
int,
long long>::
type 664 typedef
std::conditional<sizeof(
unsigned long) == sizeof(
unsigned),
665 unsigned,
unsigned long long>::
type ulong_type;
667 (sizeof(
unsigned long) == sizeof(
unsigned) ? uint_type :
ulong_long_type),
668 unsigned long, ulong_type)
676 template <typename
C, typename Char>
678 std::is_same<typename C::char_type, Char>::value,
681 template <
typename C>
718 template <
typename C,
typename T>
721 static_assert(!
sizeof(
T),
"formatting of non-void pointers is disallowed");
724 template <
typename C,
typename T>
725 inline typename std::enable_if<
730 template <
typename C,
typename T,
typename Char =
typename C::
char_type>
731 inline typename std::enable_if<
737 template <
typename C,
typename T,
typename Char =
typename C::
char_type>
738 inline typename std::enable_if<
740 !std::is_convertible<T, basic_string_view<Char>>
::value &&
741 !is_constructible<basic_string_view<Char>,
T>
::value &&
748 template <
typename C,
typename T>
752 std::memcpy(val.
data, &arg,
sizeof(arg));
753 return static_cast<const void*
>(&
val);
756 template <
typename C,
typename S>
762 static_assert(std::is_same<
764 "mismatch between char-types of context and argument");
772 template <
typename Context>
778 template <
typename Context>
784 template <
typename ContextType,
typename T>
788 template <
typename Visitor,
typename Ctx>
802 void format(Context &ctx)
const { custom_.format(custom_.value, ctx); }
829 template <
typename Visitor,
typename Context>
840 return vis(arg.
value_.int_value);
842 return vis(arg.
value_.uint_value);
844 return vis(arg.
value_.long_long_value);
846 return vis(arg.
value_.ulong_long_value);
848 return vis(arg.
value_.int_value != 0);
850 return vis(static_cast<char_type>(arg.
value_.int_value));
852 return vis(arg.
value_.double_value);
854 return vis(arg.
value_.long_double_value);
856 return vis(arg.
value_.string.value);
861 return vis(arg.
value_.pointer);
869 template <
typename Visitor,
typename Context>
877 template <
typename Char,
typename ErrorHandler =
internal::error_handler>
889 :
ErrorHandler(eh), format_str_(format_str), next_arg_id_(0) {}
894 return format_str_.
begin();
909 if (next_arg_id_ > 0) {
910 on_error(
"cannot switch from automatic to manual argument indexing");
919 ErrorHandler::on_error(message);
934 template <
typename Context>
937 arg_map(
const arg_map &) =
delete;
938 void operator=(
const arg_map &) =
delete;
952 map_[size_] =
entry{named.
name, named.template deserialize<Context>()};
963 for (
entry *it = map_, *
end = map_ + size_; it !=
end; ++it) {
964 if (it->name == name)
980 template <
typename Locale>
983 template <
typename Locale>
987 template <
typename OutputIt,
typename Context,
typename Char>
1005 : parse_context_(format_str), out_(out), args_(ctx_args), loc_(
loc) {}
1009 format_arg
arg = args_.
get(arg_id);
1011 parse_context_.
on_error(
"argument index out of range");
1019 this->do_get_arg(arg_id) : format_arg();
1034 iterator
out() {
return out_; }
1043 template <
typename Context,
typename T>
1045 typedef decltype(make_value<Context>(
1050 template <typename Context>
1053 template <
typename Context,
typename Arg,
typename... Args>
1058 template <
typename Context,
typename T>
1066 template <
bool IS_PACKED,
typename Context,
typename T>
1067 inline typename std::enable_if<IS_PACKED, value<Context>>
::type 1069 return make_value<Context>(
value);
1072 template <
bool IS_PACKED,
typename Context,
typename T>
1073 inline typename std::enable_if<!IS_PACKED, basic_format_arg<Context>>
::type 1075 return make_arg<Context>(
value);
1080 template <
typename OutputIt,
typename Char>
1083 OutputIt, basic_format_context<OutputIt, Char>, Char> {
1089 template <
typename T>
1100 using base::get_arg;
1112 : base(out, format_str, ctx_args,
loc) {}
1115 return this->do_get_arg(this->
parse_context().next_arg_id());
1117 format_arg
get_arg(
unsigned arg_id) {
return this->do_get_arg(arg_id); }
1124 template <
typename Char>
1127 std::back_insert_iterator<internal::basic_buffer<Char>>, Char>
type;
1139 template <
typename Context,
typename ...Args>
1142 static const size_t NUM_ARGS =
sizeof...(Args);
1147 typedef typename std::conditional<IS_PACKED,
1151 static const size_t DATA_SIZE =
1152 NUM_ARGS + (IS_PACKED && NUM_ARGS != 0 ? 0 : 1);
1153 value_type data_[DATA_SIZE];
1164 #if FMT_USE_CONSTEXPR11 1170 #if (FMT_GCC_VERSION && FMT_GCC_VERSION <= 405) || \ 1171 (FMT_MSC_VER && FMT_MSC_VER <= 1800) 1174 value_type
init[DATA_SIZE] =
1175 {internal::make_arg<IS_PACKED, Context>(
args)...};
1176 std::memcpy(data_, init,
sizeof(init));
1180 : data_{internal::make_arg<IS_PACKED, Context>(
args)...} {}
1184 #if !FMT_USE_CONSTEXPR11 1185 template <
typename Context,
typename ...Args>
1202 template <
typename Context>
1225 unsigned shift = index * 4;
1227 (types_ & (0xfull << shift)) >> shift);
1238 auto num_args = max_size();
1239 if (index < num_args)
1249 val = values_[
index];
1261 template <
typename... Args>
1263 : types_(static_cast<unsigned long long>(store.TYPES)) {
1264 set_data(store.
data_);
1281 arg = arg.
value_.as_named_arg().template deserialize<Context>();
1287 return static_cast<size_type
>(
1295 template <
typename ...Args>
1300 template <
typename ...Args>
1305 #define FMT_ENABLE_IF_T(B, T) typename std::enable_if<B, T>::type 1307 #ifndef FMT_USE_ALIAS_TEMPLATES 1308 # define FMT_USE_ALIAS_TEMPLATES FMT_HAS_FEATURE(cxx_alias_templates) 1310 #if FMT_USE_ALIAS_TEMPLATES 1312 template <
typename S>
1315 #define FMT_CHAR(S) fmt::char_t<S> 1317 template <
typename S>
1319 internal::is_string<S>::value, typename internal::char_t<S>::type> {};
1320 #define FMT_CHAR(S) typename char_t<S>::type 1324 template <
typename Char>
1325 struct named_arg_base {
1334 template <
typename Context>
1342 template <
typename T,
typename Char>
1350 template <
typename... Args,
typename S>
1353 template <
typename... Args,
typename S>
1357 template <
typename S,
typename... Args>
1359 typename buffer_context<FMT_CHAR(S)>::type, Args...> {
1370 template <
typename Char>
1371 std::basic_string<Char>
vformat(
1375 template <
typename Char>
1390 template <
typename T>
1395 template <
typename T>
1401 template <
typename S,
typename T,
typename Char>
1404 template <
typename Container>
1407 template <
typename Char>
1410 template <
typename Char>
1414 template <
typename Container,
typename S>
1415 typename std::enable_if<
1418 std::back_insert_iterator<Container> out,
1426 template <
typename Container,
typename S,
typename... Args>
1427 inline typename std::enable_if<
1429 std::back_insert_iterator<Container>>
::type 1430 format_to(std::back_insert_iterator<Container> out,
const S &format_str,
1431 const Args &...
args) {
1436 template <
typename S,
typename Char = FMT_CHAR(S)>
1438 const S &format_str,
1453 template <
typename S,
typename... Args>
1454 inline std::basic_string<FMT_CHAR(S)>
format(
1455 const S &format_str,
const Args &...
args) {
1475 template <
typename S,
typename... Args>
1494 template <
typename S,
typename... Args>
1502 #endif // FMT_CORE_H_
internal::context_base< OutputIt, basic_format_context, Char > base
T & operator[](std::size_t index)
FMT_CONSTEXPR bool check_arg_id(unsigned)
value(const signed char *val)
format_arg get_arg(unsigned arg_id)
Container & get_container(std::back_insert_iterator< Container > it)
const T & const_reference
FMT_CONSTEXPR basic_string_view() FMT_NOEXCEPT
std::conditional< sizeof(long)==sizeof(int), int, long long >::type long_type
basic_parse_context< wchar_t > wformat_parse_context
value(const unsigned char *val)
basic_format_args< Context > args_
FMT_CONSTEXPR auto begin(const C &c) -> decltype(c.begin())
checked_args(const S &format_str, const Args &...args)
format_arg do_get_arg(unsigned arg_id)
int compare(unsigned *r, sha1::digest_t const &d)
basic_string_view< Char >::iterator iterator
internal::named_arg< T, char > arg(string_view name, const T &arg)
const named_arg_base< char_type > & as_named_arg()
basic_format_arg< Context > format_arg
const T & operator[](std::size_t index) const
FMT_CONSTEXPR error_handler(const error_handler &)
void on_error(const char *message)
basic_buffer(T *p=FMT_NULL, std::size_t sz=0, std::size_t cap=0) FMT_NOEXCEPT
FMT_CONSTEXPR error_handler()
std::add_rvalue_reference< T >::type declval() FMT_NOEXCEPT
basic_string_view< Char > format_str_
Context::char_type char_type
basic_parse_context< wchar_t > wparse_context
named_arg_base(basic_string_view< Char > nm)
basic_format_args< Context > args() const
FMT_CONSTEXPR basic_string_view(const std::basic_string< Char, Alloc > &s) FMT_NOEXCEPT
basic_string_view< wchar_t > wstring_view
friend bool operator<(basic_string_view lhs, basic_string_view rhs)
buffer_context< char >::type format_context
void check_arg_id(basic_string_view< Char >)
void resize(std::size_t new_size)
FMT_CONSTEXPR void on_error(const char *message)
#define FMT_MAKE_VALUE_SAME(TAG, Type)
basic_parse_context< Char > parse_context_
basic_buffer(std::size_t sz) FMT_NOEXCEPT
value(unsigned long long val)
FMT_CONSTEXPR basic_string_view(const Char *s, size_t count) FMT_NOEXCEPT
base::format_arg format_arg
basic_format_arg< Context > arg(unsigned id) const
FMT_CONSTEXPR basic_format_arg< Context > make_arg(const T &value)
#define FMT_END_NAMESPACE
FMT_CONSTEXPR size_t size() const
named_arg(basic_string_view< Char > name, const T &val)
std::enable_if<!is_compile_string< S >::value >::type check_format_string(const S &)
basic_buffer< wchar_t > wbuffer
basic_string_view< char_type > name
friend bool operator!=(basic_string_view lhs, basic_string_view rhs)
decltype(auto) constexpr size(T &&obj)
ADL-aware version of std::size.
std::enable_if< is_contiguous< Container >::value &&internal::is_string< S >::value, std::back_insert_iterator< Container > >::type format_to(std::back_insert_iterator< Container > out, const S &format_str, const Args &...args)
container_buffer(Container &c)
basic_string_view(const Char *s)
value(const char_type *val)
buffer_context< FMT_CHAR(S)>::type context
value(basic_string_view< char_type > val)
void advance_to(iterator it)
buffer_context< Char >::type::iterator vformat_to(internal::basic_buffer< Char > &buf, basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
FMT_CONSTEXPR auto end(const C &c) -> decltype(c.end())
dummy_string_view to_string_view(...)
const T * data() const FMT_NOEXCEPT
FMT_CONSTEXPR const Char * data() const
friend bool operator>=(basic_string_view lhs, basic_string_view rhs)
basic_parse_context< char > format_parse_context
std::enable_if< is_contiguous< Container >::value, typename checked< typename Container::value_type >::type >::type reserve(std::back_insert_iterator< Container > &it, std::size_t n)
std::enable_if< internal::is_string< String >::value >::type print(std::FILE *f, const text_style &ts, const String &format_str, const Args &...args)
FMT_CONSTEXPR bool is_arithmetic(type t)
std::basic_string< Char > vformat(basic_string_view< Char > format_str, basic_format_args< typename buffer_context< Char >::type > args)
format_arg get_arg(unsigned arg_id)
FMT_CONSTEXPR bool is_integral(type t)
basic_string_view< char > string_view
buffer_context< wchar_t >::type wformat_context
std::size_t size() const FMT_NOEXCEPT
void push_back(const T &value)
std::size_t capacity() const FMT_NOEXCEPT
basic_format_arg< Context > arg
basic_string_view< Char > name
void grow(std::size_t capacity) FMT_OVERRIDE
friend bool operator>(basic_string_view lhs, basic_string_view rhs)
FMT_CONSTEXPR ErrorHandler error_handler() const
FMT_MAKE_VALUE((sizeof(long)==sizeof(int)?int_type:long_long_type), long, long_type) typedef std FMT_MAKE_VALUE((sizeof(unsigned long)==sizeof(unsigned)?uint_type:ulong_long_type), unsigned long, ulong_type) template< typename C
void reserve(std::size_t new_capacity)
const char * data() const
basic_buffer< char > buffer
FMT_CONSTEXPR void advance_to(iterator it)
format_arg_store< Context, Args... > make_format_args(const Args &...args)
FMT_MAKE_VALUE((sizeof(long)==sizeof(int)?int_type:long_long_type), long, long_type) typedef std Char FMT_CONSTEXPR std::enable_if< std::is_same< typename C::char_type, Char >::value, init< C, int, char_type > >::type make_value(Char val)
string_value< char_type > string
FMT_CONSTEXPR value(int val=0)
basic_format_context< std::back_insert_iterator< internal::basic_buffer< Char > >, Char > type
long long long_long_value
friend bool operator<=(basic_string_view lhs, basic_string_view rhs)
std::basic_string< FMT_CHAR(S)> format(const S &format_str, const Args &...args)
basic_format_arg< Context > deserialize() const
void push_back(value< Context > val)
FMT_CONSTEXPR internal::result_of< Visitor(int)>::type visit(Visitor &&vis, const basic_format_arg< Context > &arg)
FMT_CONSTEXPR std::make_unsigned< Int >::type to_unsigned(Int value)
context_base(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< Context > ctx_args, locale_ref loc=locale_ref())
std::result_of< typename std::remove_reference< F >::type(Args...)>::type type
friend bool operator==(basic_string_view lhs, basic_string_view rhs)
const GenericPointer< typename T::ValueType > T2 value
FMT_CONSTEXPR basic_parse_context(basic_string_view< Char > format_str, ErrorHandler eh=ErrorHandler())
FMT_CONSTEXPR iterator begin() const FMT_NOEXCEPT
Configuration append(Configuration &a, Configuration &b)
Return an array which is composed of the array b appended to the array a.
int compare(basic_string_view other) const
FMT_CONSTEXPR iterator end() const
internal::arg_map< basic_format_context > map_
#define FMT_ENABLE_IF_T(B, T)
FMT_API void vprint(std::FILE *f, string_view format_str, format_args args)
basic_format_arg< Context > find(basic_string_view< char_type > name) const
basic_format_context(OutputIt out, basic_string_view< char_type > format_str, basic_format_args< basic_format_context > ctx_args, internal::locale_ref loc=internal::locale_ref())
basic_format_args< context > operator*() const
#define FMT_ASSERT(condition, message)
FMT_CONSTEXPR iterator begin() const
const GenericPointer< typename T::ValueType > & pointer
basic_string_view< Char > to_string_view(basic_string_view< Char > s)
custom_value< Context > custom
internal::error_handler error_handler()
formatter< T, char_type > type
string_value< signed char > sstring
basic_parse_context< char_type > & parse_context()
Context::char_type char_type
FMT_CONSTEXPR void remove_prefix(size_t n)
string_value< unsigned char > ustring
basic_parse_context< char > parse_context
static void format_custom_arg(const void *arg, Context &ctx)
FMT_CONSTEXPR init(const T &v)
FMT_CONSTEXPR internal::result_of< Visitor(int)>::type visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg)
unsigned long long ulong_long_value
long double long_double_value
FMT_CONSTEXPR iterator end() const FMT_NOEXCEPT
char data[ sizeof(basic_format_arg< typename buffer_context< Char >::type >)]
FMT_CONSTEXPR11 unsigned long long get_types()