diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1341e9f3a367..3fac2afca9d4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -199,7 +199,10 @@ if (HAVE_STRTOD_L)
 endif ()
 
 if (MINGW)
-  target_compile_options(fmt PUBLIC "-Wa,-mbig-obj")
+  check_cxx_compiler_flag("Wa,-mbig-obj" FMT_HAS_MBIG_OBJ)
+  if (${FMT_HAS_MBIG_OBJ})
+    target_compile_options(fmt PUBLIC "-Wa,-mbig-obj")
+  endif()
 endif ()
 
 if (FMT_WERROR)
diff --git a/include/fmt/format.h b/include/fmt/format.h
index 1fc57de191e1..83c7c54fffbe 100644
--- a/include/fmt/format.h
+++ b/include/fmt/format.h
@@ -828,7 +828,7 @@ struct FMT_EXTERN_TEMPLATE_API uint128_wrapper {
   uint64_t high() const FMT_NOEXCEPT { return uint64_t(internal_ >> 64); }
   uint64_t low() const FMT_NOEXCEPT { return uint64_t(internal_); }
 
-  uint128_wrapper& operator+=(uint64_t n) & FMT_NOEXCEPT {
+  uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT {
     internal_ += n;
     return *this;
   }
@@ -842,7 +842,7 @@ struct FMT_EXTERN_TEMPLATE_API uint128_wrapper {
   uint64_t high() const FMT_NOEXCEPT { return high_; }
   uint64_t low() const FMT_NOEXCEPT { return low_; }
 
-  uint128_wrapper& operator+=(uint64_t n) & FMT_NOEXCEPT {
+  uint128_wrapper& operator+=(uint64_t n) FMT_NOEXCEPT {
 #  if defined(_MSC_VER) && defined(_M_X64)
     unsigned char carry = _addcarry_u64(0, low_, n, &low_);
     _addcarry_u64(carry, high_, 0, &high_);