Remove unnecessary template arg from basic_format_args
diff --git a/fmt/format.h b/fmt/format.h
index a67aa34..6f9007d 100644
--- a/fmt/format.h
+++ b/fmt/format.h
@@ -1327,7 +1327,7 @@
 
 struct monostate {};
 
-template <typename Context, typename Char>
+template <typename Context>
 class basic_format_args;
 
 // A formatting argument. It is a trivially copyable/constructible type to
@@ -1345,7 +1345,7 @@
   friend typename std::result_of<Visitor(int)>::type
     visit(Visitor &&vis, basic_format_arg<Ctx> arg);
 
-  friend class basic_format_args<Context, typename Context::char_type>;
+  friend class basic_format_args<Context>;
   friend class internal::ArgMap<Context>;
 
  public:
@@ -1553,7 +1553,7 @@
 }
 
 /** Formatting arguments. */
-template <typename Context, typename Char>
+template <typename Context>
 class basic_format_args {
  public:
   typedef unsigned size_type;
@@ -1626,8 +1626,8 @@
   }
 };
 
-typedef basic_format_args<basic_format_context<char>, char> format_args;
-typedef basic_format_args<basic_format_context<wchar_t>, wchar_t> wformat_args;
+typedef basic_format_args<format_context> format_args;
+typedef basic_format_args<wformat_context> wformat_args;
 
 enum Alignment {
   ALIGN_DEFAULT, ALIGN_LEFT, ALIGN_RIGHT, ALIGN_CENTER, ALIGN_NUMERIC
@@ -1863,7 +1863,7 @@
   MapType map_;
 
  public:
-  void init(const basic_format_args<Context, Char> &args);
+  void init(const basic_format_args<Context> &args);
 
   const basic_format_arg<Context>
       *find(const fmt::BasicStringRef<Char> &name) const {
@@ -1878,7 +1878,7 @@
 };
 
 template <typename Context>
-void ArgMap<Context>::init(const basic_format_args<Context, Char> &args) {
+void ArgMap<Context>::init(const basic_format_args<Context> &args) {
   if (!map_.empty())
     return;
   typedef internal::NamedArg<Context> NamedArg;
@@ -2050,18 +2050,17 @@
 class format_context_base {
  private:
   const Char *ptr_;
-  basic_format_args<Context, Char> args_;
+  basic_format_args<Context> args_;
   int next_arg_index_;
 
  protected:
   typedef basic_format_arg<Context> format_arg;
 
-  format_context_base(const Char *format_str,
-                      basic_format_args<Context, Char> args)
+  format_context_base(const Char *format_str, basic_format_args<Context> args)
   : ptr_(format_str), args_(args), next_arg_index_(0) {}
   ~format_context_base() {}
 
-  basic_format_args<Context, Char> args() const { return args_; }
+  basic_format_args<Context> args() const { return args_; }
 
   // Returns the argument with specified index.
   format_arg do_get_arg(unsigned arg_index, const char *&error) {
@@ -2157,7 +2156,7 @@
    \endrst
    */
   basic_format_context(const Char *format_str,
-                       basic_format_args<basic_format_context, Char> args)
+                       basic_format_args<basic_format_context> args)
   : Base(format_str, args) {}
 
   // Parses argument id and returns corresponding argument.
@@ -2394,7 +2393,7 @@
   }
 
   void vwrite(BasicCStringRef<Char> format,
-              basic_format_args<basic_format_context<Char>, Char> args);
+              basic_format_args<basic_format_context<Char>> args);
   /**
     \rst
     Writes formatted data.
@@ -3578,7 +3577,7 @@
 /** Formats arguments and writes the output to the writer. */
 template <typename ArgFormatter, typename Char, typename Context>
 void vformat(BasicWriter<Char> &writer, BasicCStringRef<Char> format_str,
-             basic_format_args<Context, Char> args) {
+             basic_format_args<Context> args) {
   basic_format_context<Char> ctx(format_str.c_str(), args);
   const Char *&s = ctx.ptr();
   const Char *start = s;
@@ -3604,7 +3603,7 @@
 template <typename Char>
 inline void BasicWriter<Char>::vwrite(
     BasicCStringRef<Char> format,
-    basic_format_args<basic_format_context<Char>, Char> args) {
+    basic_format_args<basic_format_context<Char>> args) {
   vformat<ArgFormatter<Char>>(*this, format, args);
 }
 }  // namespace fmt
diff --git a/fmt/printf.h b/fmt/printf.h
index 13b82af..beea7c3 100644
--- a/fmt/printf.h
+++ b/fmt/printf.h
@@ -282,7 +282,7 @@
   /** Formats an argument of a custom (user-defined) type. */
   void operator()(internal::CustomValue<Char> c) {
     const Char format_str[] = {'}', '\0'};
-    auto args = basic_format_args<basic_format_context<Char>, Char>();
+    auto args = basic_format_args<basic_format_context<Char>>();
     basic_format_context<Char> ctx(format_str, args);
     c.format(this->writer(), c.value, &ctx);
   }
@@ -322,7 +322,7 @@
    \endrst
    */
   explicit printf_context(BasicCStringRef<Char> format_str,
-                          basic_format_args<printf_context, Char> args)
+                          basic_format_args<printf_context> args)
     : Base(format_str.c_str(), args) {}
 
   /** Formats stored arguments and writes the output to the writer. */
@@ -510,11 +510,11 @@
 
 template <typename Char>
 void printf(BasicWriter<Char> &w, BasicCStringRef<Char> format,
-            basic_format_args<printf_context<Char>, Char> args) {
+            basic_format_args<printf_context<Char>> args) {
   printf_context<Char>(format, args).format(w);
 }
 
-typedef basic_format_args<printf_context<char>, char> printf_args;
+typedef basic_format_args<printf_context<char>> printf_args;
 
 inline std::string vsprintf(CStringRef format, printf_args args) {
   MemoryWriter w;
@@ -537,8 +537,7 @@
 }
 
 inline std::wstring vsprintf(
-    WCStringRef format,
-    basic_format_args<printf_context<wchar_t>, wchar_t> args) {
+    WCStringRef format, basic_format_args<printf_context<wchar_t>> args) {
   WMemoryWriter w;
   printf(w, format, args);
   return w.str();
diff --git a/test/custom-formatter-test.cc b/test/custom-formatter-test.cc
index 51bed76..7601aeb 100644
--- a/test/custom-formatter-test.cc
+++ b/test/custom-formatter-test.cc
@@ -63,7 +63,7 @@
 
 std::string custom_vsprintf(
     const char* format_str,
-    fmt::basic_format_args<CustomPrintfFormatter, char> args) {
+    fmt::basic_format_args<CustomPrintfFormatter> args) {
   fmt::MemoryWriter writer;
   CustomPrintfFormatter formatter(format_str, args);
   formatter.format(writer);