spec -> specs
diff --git a/include/fmt/printf.h b/include/fmt/printf.h
index 4392d1c..77c2ee8 100644
--- a/include/fmt/printf.h
+++ b/include/fmt/printf.h
@@ -151,16 +151,16 @@
  private:
   typedef basic_format_specs<Char> format_specs;
 
-  format_specs& spec_;
+  format_specs& specs_;
 
  public:
-  explicit printf_width_handler(format_specs& spec) : spec_(spec) {}
+  explicit printf_width_handler(format_specs& specs) : specs_(specs) {}
 
   template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>
   unsigned operator()(T value) {
     auto width = static_cast<uint32_or_64_t<T>>(value);
     if (internal::is_negative(value)) {
-      spec_.align = align::left;
+      specs_.align = align::left;
       width = 0 - width;
     }
     unsigned int_max = std::numeric_limits<int>::max();
@@ -213,12 +213,12 @@
   context_type& context_;
 
   void write_null_pointer(char) {
-    this->spec()->type = 0;
+    this->specs()->type = 0;
     this->write("(nil)");
   }
 
   void write_null_pointer(wchar_t) {
-    this->spec()->type = 0;
+    this->specs()->type = 0;
     this->write(L"(nil)");
   }
 
@@ -228,29 +228,29 @@
   /**
     \rst
     Constructs an argument formatter object.
-    *buffer* is a reference to the output buffer and *spec* contains format
+    *buffer* is a reference to the output buffer and *specs* contains format
     specifier information for standard argument types.
     \endrst
    */
-  printf_arg_formatter(iterator iter, format_specs& spec, context_type& ctx)
-      : base(Range(iter), &spec, internal::locale_ref()), context_(ctx) {}
+  printf_arg_formatter(iterator iter, format_specs& specs, context_type& ctx)
+      : base(Range(iter), &specs, internal::locale_ref()), context_(ctx) {}
 
   template <typename T, FMT_ENABLE_IF(std::is_integral<T>::value)>
   iterator operator()(T value) {
     // MSVC2013 fails to compile separate overloads for bool and char_type so
     // use std::is_same instead.
     if (std::is_same<T, bool>::value) {
-      format_specs& fmt_spec = *this->spec();
-      if (fmt_spec.type != 's') return base::operator()(value ? 1 : 0);
-      fmt_spec.type = 0;
+      format_specs& fmt_specs = *this->specs();
+      if (fmt_specs.type != 's') return base::operator()(value ? 1 : 0);
+      fmt_specs.type = 0;
       this->write(value != 0);
     } else if (std::is_same<T, char_type>::value) {
-      format_specs& fmt_spec = *this->spec();
-      if (fmt_spec.type && fmt_spec.type != 'c')
+      format_specs& fmt_specs = *this->specs();
+      if (fmt_specs.type && fmt_specs.type != 'c')
         return (*this)(static_cast<int>(value));
-      fmt_spec.sign = sign::none;
-      fmt_spec.alt = false;
-      fmt_spec.align = align::right;
+      fmt_specs.sign = sign::none;
+      fmt_specs.alt = false;
+      fmt_specs.align = align::right;
       return base::operator()(value);
     } else {
       return base::operator()(value);
@@ -267,7 +267,7 @@
   iterator operator()(const char* value) {
     if (value)
       base::operator()(value);
-    else if (this->spec()->type == 'p')
+    else if (this->specs()->type == 'p')
       write_null_pointer(char_type());
     else
       this->write("(null)");
@@ -278,7 +278,7 @@
   iterator operator()(const wchar_t* value) {
     if (value)
       base::operator()(value);
-    else if (this->spec()->type == 'p')
+    else if (this->specs()->type == 'p')
       write_null_pointer(char_type());
     else
       this->write(L"(null)");
@@ -294,7 +294,7 @@
   /** Formats a pointer. */
   iterator operator()(const void* value) {
     if (value) return base::operator()(value);
-    this->spec()->type = 0;
+    this->specs()->type = 0;
     write_null_pointer(char_type());
     return this->out();
   }
@@ -334,14 +334,15 @@
   basic_format_args<basic_printf_context> args_;
   basic_parse_context<Char> parse_ctx_;
 
-  static void parse_flags(format_specs& spec, const Char*& it, const Char* end);
+  static void parse_flags(format_specs& specs, const Char*& it,
+                          const Char* end);
 
   // Returns the argument with specified index or, if arg_index is equal
   // to the maximum unsigned value, the next argument.
   format_arg get_arg(unsigned arg_index = std::numeric_limits<unsigned>::max());
 
   // Parses argument index, flags and width and returns the argument index.
-  unsigned parse_header(const Char*& it, const Char* end, format_specs& spec);
+  unsigned parse_header(const Char*& it, const Char* end, format_specs& specs);
 
  public:
   /**
@@ -373,25 +374,25 @@
 };
 
 template <typename OutputIt, typename Char>
-void basic_printf_context<OutputIt, Char>::parse_flags(format_specs& spec,
+void basic_printf_context<OutputIt, Char>::parse_flags(format_specs& specs,
                                                        const Char*& it,
                                                        const Char* end) {
   for (; it != end; ++it) {
     switch (*it) {
     case '-':
-      spec.align = align::left;
+      specs.align = align::left;
       break;
     case '+':
-      spec.sign = sign::plus;
+      specs.sign = sign::plus;
       break;
     case '0':
-      spec.fill[0] = '0';
+      specs.fill[0] = '0';
       break;
     case ' ':
-      spec.sign = sign::space;
+      specs.sign = sign::space;
       break;
     case '#':
-      spec.alt = true;
+      specs.alt = true;
       break;
     default:
       return;
@@ -411,7 +412,7 @@
 
 template <typename OutputIt, typename Char>
 unsigned basic_printf_context<OutputIt, Char>::parse_header(
-    const Char*& it, const Char* end, format_specs& spec) {
+    const Char*& it, const Char* end, format_specs& specs) {
   unsigned arg_index = std::numeric_limits<unsigned>::max();
   char_type c = *it;
   if (c >= '0' && c <= '9') {
@@ -423,25 +424,25 @@
       ++it;
       arg_index = value;
     } else {
-      if (c == '0') spec.fill[0] = '0';
+      if (c == '0') specs.fill[0] = '0';
       if (value != 0) {
         // Nonzero value means that we parsed width and don't need to
         // parse it or flags again, so return now.
-        spec.width = value;
+        specs.width = value;
         return arg_index;
       }
     }
   }
-  parse_flags(spec, it, end);
+  parse_flags(specs, it, end);
   // Parse width.
   if (it != end) {
     if (*it >= '0' && *it <= '9') {
       internal::error_handler eh;
-      spec.width = parse_nonnegative_int(it, end, eh);
+      specs.width = parse_nonnegative_int(it, end, eh);
     } else if (*it == '*') {
       ++it;
-      spec.width = visit_format_arg(
-          internal::printf_width_handler<char_type>(spec), get_arg());
+      specs.width = visit_format_arg(
+          internal::printf_width_handler<char_type>(specs), get_arg());
     }
   }
   return arg_index;
@@ -464,11 +465,11 @@
     }
     out = std::copy(start, it - 1, out);
 
-    format_specs spec;
-    spec.align = align::right;
+    format_specs specs;
+    specs.align = align::right;
 
     // Parse argument index, flags and width.
-    unsigned arg_index = parse_header(it, end, spec);
+    unsigned arg_index = parse_header(it, end, specs);
 
     // Parse precision.
     if (it != end && *it == '.') {
@@ -476,24 +477,24 @@
       c = it != end ? *it : 0;
       if ('0' <= c && c <= '9') {
         internal::error_handler eh;
-        spec.precision = static_cast<int>(parse_nonnegative_int(it, end, eh));
+        specs.precision = static_cast<int>(parse_nonnegative_int(it, end, eh));
       } else if (c == '*') {
         ++it;
-        spec.precision =
+        specs.precision =
             visit_format_arg(internal::printf_precision_handler(), get_arg());
       } else {
-        spec.precision = 0;
+        specs.precision = 0;
       }
     }
 
     format_arg arg = get_arg(arg_index);
-    if (spec.alt && visit_format_arg(internal::is_zero_int(), arg))
-      spec.alt = false;
-    if (spec.fill[0] == '0') {
+    if (specs.alt && visit_format_arg(internal::is_zero_int(), arg))
+      specs.alt = false;
+    if (specs.fill[0] == '0') {
       if (arg.is_arithmetic())
-        spec.align = align::numeric;
+        specs.align = align::numeric;
       else
-        spec.fill[0] = ' ';  // Ignore '0' flag for non-numeric types.
+        specs.fill[0] = ' ';  // Ignore '0' flag for non-numeric types.
     }
 
     // Parse length and convert the argument to the required type.
@@ -539,13 +540,13 @@
 
     // Parse type.
     if (it == end) FMT_THROW(format_error("invalid format string"));
-    spec.type = static_cast<char>(*it++);
+    specs.type = static_cast<char>(*it++);
     if (arg.is_integral()) {
       // Normalize type.
-      switch (spec.type) {
+      switch (specs.type) {
       case 'i':
       case 'u':
-        spec.type = 'd';
+        specs.type = 'd';
         break;
       case 'c':
         visit_format_arg(internal::char_converter<basic_printf_context>(arg),
@@ -557,7 +558,7 @@
     start = it;
 
     // Format argument.
-    visit_format_arg(ArgFormatter(out, spec, *this), arg);
+    visit_format_arg(ArgFormatter(out, specs, *this), arg);
   }
   return std::copy(start, it, out);
 }