diff --git a/include/fmt/compile.h b/include/fmt/compile.h
index 8ce043f63aaec..73df39f830926 100644
--- a/include/fmt/compile.h
+++ b/include/fmt/compile.h
@@ -36,8 +36,7 @@ template <typename OutputIt> class truncating_iterator_base {
   using difference_type = std::ptrdiff_t;
   using pointer = void;
   using reference = void;
-  using _Unchecked_type =
-      truncating_iterator_base;  // Mark iterator as checked.
+  FMT_UNCHECKED_ITERATOR(truncating_iterator_base);
 
   OutputIt base() const { return out_; }
   size_t count() const { return count_; }
diff --git a/include/fmt/core.h b/include/fmt/core.h
index 304b1f1d6eed9..387f62f6541f9 100644
--- a/include/fmt/core.h
+++ b/include/fmt/core.h
@@ -217,6 +217,12 @@
 #  endif
 #endif
 
+#ifdef _MSC_VER
+#  define FMT_UNCHECKED_ITERATOR(It) using _Unchecked_type = It // Mark iterator as checked.
+#else
+#  define FMT_UNCHECKED_ITERATOR(It) using DummyTypeName = It
+#endif
+
 #ifndef FMT_BEGIN_NAMESPACE
 #  define FMT_BEGIN_NAMESPACE \
     namespace fmt {           \
@@ -1498,7 +1504,7 @@ class appender : public std::back_insert_iterator<detail::buffer<char>> {
  public:
   using std::back_insert_iterator<detail::buffer<char>>::back_insert_iterator;
   appender(base it) noexcept : base(it) {}
-  using _Unchecked_type = appender;  // Mark iterator as checked.
+  FMT_UNCHECKED_ITERATOR(appender);
 
   auto operator++() noexcept -> appender& { return *this; }
 
diff --git a/include/fmt/format.h b/include/fmt/format.h
index d71715498d8c3..4b1162fb27780 100644
--- a/include/fmt/format.h
+++ b/include/fmt/format.h
@@ -1848,7 +1848,7 @@ class counting_iterator {
   using difference_type = std::ptrdiff_t;
   using pointer = void;
   using reference = void;
-  using _Unchecked_type = counting_iterator;  // Mark iterator as checked.
+  FMT_UNCHECKED_ITERATOR(counting_iterator);
 
   struct value_type {
     template <typename T> void operator=(const T&) {}