26template <
typename T> 
auto unwrap(
const T& v) -> 
const T& { 
return v; }
 
   28auto unwrap(
const std::reference_wrapper<T>& v) -> 
const T& {
 
   29  return static_cast<const T&
>(v);
 
 
   38template <
typename = 
void> 
struct node {
 
   40  std::unique_ptr<node<>> 
next;
 
 
   44  template <
typename T> 
struct typed_node : 
node<> {
 
   47    template <
typename Arg>
 
   50    template <
typename Char>
 
   55  std::unique_ptr<node<>> head_;
 
   58  template <
typename T, 
typename Arg> 
auto push(
const Arg& 
arg) -> 
const T& {
 
   59    auto new_node = std::unique_ptr<typed_node<T>>(
new typed_node<T>(
arg));
 
   61    new_node->next = std::move(head_);
 
   62    head_ = std::move(new_node);
 
 
 
   76  using char_type = 
typename Context::char_type;
 
   78  template <
typename T> 
struct need_copy {
 
   84                std::is_same<T, basic_string_view<char_type>>::value ||
 
   85                std::is_same<T, detail::std_string_view<char_type>>::value ||
 
   94      std::is_convertible<T, std::basic_string<char_type>>::value &&
 
   96      std::basic_string<char_type>, T>;
 
   99  std::vector<basic_format_arg<Context>> data_;
 
  100  std::vector<detail::named_arg_info<char_type>> named_info_;
 
  109    return named_info_.empty() ? data_.data() : data_.data() + 1;
 
  112  template <
typename T> 
void emplace_arg(
const T& 
arg) {
 
  113    data_.emplace_back(
arg);
 
  116  template <
typename T>
 
  118    if (named_info_.empty())
 
  121    auto pop_one = [](std::vector<basic_format_arg<Context>>* data) {
 
  124    std::unique_ptr<std::vector<basic_format_arg<Context>>, 
decltype(pop_one)>
 
  125        guard{&data_, pop_one};
 
  126    named_info_.push_back({
arg.name, 
static_cast<int>(data_.size() - 2u)});
 
  127    data_[0] = {named_info_.data(), named_info_.size()};
 
  136                                      !named_info_.empty());
 
 
  156      emplace_arg(dynamic_args_.
push<stored_t<T>>(
arg));
 
 
  177        "objects of built-in types and string views are always copied");
 
  178    emplace_arg(
arg.get());
 
 
  186  template <
typename T>
 
  188    const char_type* arg_name =
 
  189        dynamic_args_.
push<std::basic_string<char_type>>(
arg.name).c_str();
 
  192          fmt::arg(arg_name, dynamic_args_.
push<stored_t<T>>(
arg.value)));
 
  194      emplace_arg(fmt::arg(arg_name, 
arg.value));
 
 
  207  void reserve(
size_t new_cap, 
size_t new_cap_named) {
 
  209               "set of arguments includes set of named arguments");
 
  210    data_.reserve(new_cap);
 
  211    named_info_.reserve(new_cap_named);
 
 
  215  size_t size() const noexcept { 
return data_.size(); }
 
 
An implementation of std::basic_string_view for pre-C++17.
Definition base.h:504
auto push(const Arg &arg) -> const T &
Definition args.h:58
constexpr FMT_INLINE value()
Definition base.h:2104
detail namespace with internal helper functions
Definition input_adapters.h:32
@ value
the parser finished reading a JSON value
FMT_ALWAYS_INLINE constexpr auto const_check(T val) -> T
Definition base.h:367
auto unwrap(const T &v) -> const T &
Definition args.h:26
type
Definition base.h:937
Implement std::hash so that hash_code can be used in STL containers.
Definition PointerIntPair.h:280
std::unique_ptr< node<> > next
Definition args.h:40
#define FMT_ASSERT(condition, message)
Definition base.h:381
auto arg(const Char *name, const T &arg) -> detail::named_arg< Char, T >
Returns a named argument to be used in a formatting function.
Definition base.h:2775
#define FMT_CONSTEXPR
Definition base.h:113
#define FMT_BEGIN_NAMESPACE
Definition base.h:239
typename std::conditional< B, T, F >::type conditional_t
Definition base.h:299
#define FMT_END_NAMESPACE
Definition base.h:242