25template <
typename T>
const T&
unwrap(
const T& v) {
return v; }
27 return static_cast<const T&
>(v);
34 template <
typename =
void>
struct node {
42 template <
typename Arg>
45 template <
typename Char>
53 template <
typename T,
typename Arg>
const T&
push(
const Arg&
arg) {
56 new_node->next = std::move(
head_);
57 head_ = std::move(new_node);
73template <
typename Context>
84 static constexpr detail::type mapped_type =
85 detail::mapped_type_constant<T, Context>::value;
91 (mapped_type != detail::type::cstring_type &&
92 mapped_type != detail::type::string_type &&
93 mapped_type != detail::type::custom_type))
114 return detail::is_unpacked_bit | data_.
size() |
117 :
static_cast<unsigned long long>(detail::has_named_args_bit));
121 return named_info_.
empty() ? data_.
data() : data_.
data() + 1;
128 template <
typename T>
130 if (named_info_.
empty()) {
131 constexpr const detail::named_arg_info<char_type>* zero_ptr{
nullptr};
139 guard{&data_, pop_one};
141 data_[0].value_.named_args = {named_info_.
data(), named_info_.
size()};
188 "objects of built-in types and string views are always copied");
189 emplace_arg(
arg.get());
197 template <
typename T>
205 emplace_arg(fmt::arg(arg_name,
arg.value));
222 void reserve(
size_t new_cap,
size_t new_cap_named) {
224 "Set of arguments includes set of named arguments");
226 named_info_.
reserve(new_cap_named);
const T & push(const Arg &arg)
std::unique_ptr< node<> > head_
constexpr FMT_INLINE value()
#define FMT_ASSERT(condition, message)
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
#define FMT_BEGIN_NAMESPACE
typename std::conditional< B, T, F >::type conditional_t
#define FMT_END_NAMESPACE
T emplace_back(T... args)
const T & unwrap(const T &v)
std::unique_ptr< node<> > next
FMT_CONSTEXPR typed_node(const Arg &arg)
FMT_CONSTEXPR typed_node(const basic_string_view< Char > &arg)