28 Text processing library [text]
namespace std {
  template<class Context>
  class basic_format_arg {
  public:
    class handle;
  private:
    using char_type = Context::char_type;                                       
    variant<monostate, bool, char_type,
            int, unsigned int, long long int, unsigned long long int,
            float, double, long double,
            const char_type*, basic_string_view<char_type>,
            const void*, handle> value;                                         
    template<class T> explicit basic_format_arg(T& v) noexcept;                 
  public:
    basic_format_arg() noexcept;
    explicit operator bool() const noexcept;
    template<class Visitor>
      decltype(auto) visit(this basic_format_arg arg, Visitor&& vis);
    template<class R, class Visitor>
      R visit(this basic_format_arg arg, Visitor&& vis);
  };
}
 namespace std {
  template<class Context, class... Args>
  class format-arg-store {                                      
    array<basic_format_arg<Context>, sizeof...(Args)> args;     
  };
}
namespace std {
  template<class Context>
  class basic_format_args {
    size_t size_;                               
    const basic_format_arg<Context>* data_;     
  public:
    template<class... Args>
      basic_format_args(const format-arg-store<Context, Args...>& store) noexcept;
    basic_format_arg<Context> get(size_t i) const noexcept;
  };
  template<class Context, class... Args>
    basic_format_args(format-arg-store<Context, Args...>) -> basic_format_args<Context>;
}