From: Michael Froman <mfroman@mozilla.com>
Date: Fri, 8 Aug 2025 15:49:00 -0500
Subject: Bug 1980479 - (fix-cc46fb91c5) fixes for c++20 support

Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/313582b2ffb3f3f9aaffd399e07f55c2589a587d
---
 common_audio/window_generator.cc                    |  5 ++---
 .../aec3/comfort_noise_generator.cc                 |  9 ++-------
 modules/audio_processing/agc/utility.cc             |  4 +---
 modules/audio_processing/ns/fast_math.cc            |  5 ++---
 modules/audio_processing/ns/noise_estimator.cc      |  8 +-------
 modules/audio_processing/three_band_filter_bank.cc  | 13 ++++---------
 .../event_based_exponential_moving_average.cc       |  3 +--
 rtc_base/random.cc                                  |  3 +--
 8 files changed, 14 insertions(+), 36 deletions(-)

diff --git a/common_audio/window_generator.cc b/common_audio/window_generator.cc
index 5a6de1aec1..d364eed826 100644
--- a/common_audio/window_generator.cc
+++ b/common_audio/window_generator.cc
@@ -13,7 +13,6 @@
 #include <cmath>
 #include <complex>
 #include <cstddef>
-#include <numbers>
 
 #include "rtc_base/checks.h"
 
@@ -41,7 +40,7 @@ void WindowGenerator::Hanning(int length, float* window) {
   RTC_CHECK(window != nullptr);
   for (int i = 0; i < length; ++i) {
     window[i] =
-        0.5f * (1 - cosf(2 * std::numbers::pi_v<float> * i / (length - 1)));
+        0.5f * (1 - cosf(2 * static_cast<float>(M_PI) * i / (length - 1)));
   }
 }
 
@@ -56,7 +55,7 @@ void WindowGenerator::KaiserBesselDerived(float alpha,
 
   for (size_t i = 0; i <= half; ++i) {
     complex<float> r = (4.0f * i) / length - 1.0f;
-    sum += I0(std::numbers::pi_v<float> * alpha * sqrt(1.0f - r * r)).real();
+    sum += I0(static_cast<float>(M_PI) * alpha * sqrt(1.0f - r * r)).real();
     window[i] = sum;
   }
   for (size_t i = length - 1; i >= half; --i) {
diff --git a/modules/audio_processing/aec3/comfort_noise_generator.cc b/modules/audio_processing/aec3/comfort_noise_generator.cc
index ce500a57d5..21d6ef9b5c 100644
--- a/modules/audio_processing/aec3/comfort_noise_generator.cc
+++ b/modules/audio_processing/aec3/comfort_noise_generator.cc
@@ -16,7 +16,6 @@
 #include <cstddef>
 #include <cstdint>
 #include <memory>
-#include <numbers>
 #include <numeric>
 #include <vector>
 
@@ -36,8 +35,6 @@ namespace webrtc {
 
 namespace {
 
-using std::numbers::sqrt2_v;
-
 // Computes the noise floor value that matches a WGN input of noise_floor_dbfs.
 float GetNoiseFloorFactor(float noise_floor_dbfs) {
   // kdBfsNormalization = 20.f*log10(32768.f).
@@ -46,16 +43,14 @@ float GetNoiseFloorFactor(float noise_floor_dbfs) {
 }
 
 // Table of sqrt(2) * sin(2*pi*i/32).
-// clang-format off
 constexpr float kSqrt2Sin[32] = {
     +0.0000000f, +0.2758994f, +0.5411961f, +0.7856950f, +1.0000000f,
-    +1.1758756f, +1.3065630f, +1.3870398f, +sqrt2_v<float>, +1.3870398f,
+    +1.1758756f, +1.3065630f, +1.3870398f, +1.4142136f, +1.3870398f,
     +1.3065630f, +1.1758756f, +1.0000000f, +0.7856950f, +0.5411961f,
     +0.2758994f, +0.0000000f, -0.2758994f, -0.5411961f, -0.7856950f,
-    -1.0000000f, -1.1758756f, -1.3065630f, -1.3870398f, -sqrt2_v<float>,
+    -1.0000000f, -1.1758756f, -1.3065630f, -1.3870398f, -1.4142136f,
     -1.3870398f, -1.3065630f, -1.1758756f, -1.0000000f, -0.7856950f,
     -0.5411961f, -0.2758994f};
-// clang-format on
 
 void GenerateComfortNoise(Aec3Optimization optimization,
                           const std::array<float, kFftLengthBy2Plus1>& N2,
diff --git a/modules/audio_processing/agc/utility.cc b/modules/audio_processing/agc/utility.cc
index b8fa3605ea..2a87e5ce74 100644
--- a/modules/audio_processing/agc/utility.cc
+++ b/modules/audio_processing/agc/utility.cc
@@ -12,11 +12,9 @@
 
 #include <math.h>
 
-#include <numbers>
-
 namespace webrtc {
 
-static const double kLog10 = std::numbers::ln10;
+static const double kLog10 = 2.30258509299;
 static const double kLinear2DbScale = 20.0 / kLog10;
 static const double kLinear2LoudnessScale = 13.4 / kLog10;
 
diff --git a/modules/audio_processing/ns/fast_math.cc b/modules/audio_processing/ns/fast_math.cc
index 7d52252201..d7c7a7b4fa 100644
--- a/modules/audio_processing/ns/fast_math.cc
+++ b/modules/audio_processing/ns/fast_math.cc
@@ -13,7 +13,6 @@
 #include <cmath>
 #include <cstddef>
 #include <cstdint>
-#include <numbers>
 
 #include "api/array_view.h"
 #include "rtc_base/checks.h"
@@ -56,7 +55,7 @@ float PowApproximation(float x, float p) {
 }
 
 float LogApproximation(float x) {
-  constexpr float kLogOf2 = std::numbers::ln2_v<float>;
+  constexpr float kLogOf2 = 0.69314718056f;
   return FastLog2f(x) * kLogOf2;
 }
 
@@ -67,7 +66,7 @@ void LogApproximation(ArrayView<const float> x, ArrayView<float> y) {
 }
 
 float ExpApproximation(float x) {
-  constexpr float kLog10Ofe = std::numbers::log10e_v<float>;
+  constexpr float kLog10Ofe = 0.4342944819f;
   return PowApproximation(10.f, x * kLog10Ofe);
 }
 
diff --git a/modules/audio_processing/ns/noise_estimator.cc b/modules/audio_processing/ns/noise_estimator.cc
index 00b647ca35..bf21d38d0b 100644
--- a/modules/audio_processing/ns/noise_estimator.cc
+++ b/modules/audio_processing/ns/noise_estimator.cc
@@ -14,7 +14,6 @@
 #include <array>
 #include <cstddef>
 #include <cstdint>
-#include <numbers>
 
 #include "api/array_view.h"
 #include "modules/audio_processing/ns/fast_math.h"
@@ -26,14 +25,10 @@ namespace webrtc {
 
 namespace {
 
-using std::numbers::ln10_v;
-
 // Log(i).
-// clang-format off
 constexpr std::array<float, 129> log_table = {
     0.f,       0.f,       0.f,       0.f,       0.f,       1.609438f, 1.791759f,
-    1.945910f, 2.079442f, 2.197225f, ln10_v<float>, 2.397895f, 2.484907f,
-    2.564949f,
+    1.945910f, 2.079442f, 2.197225f, 2.302585f, 2.397895f, 2.484907f, 2.564949f,
     2.639057f, 2.708050f, 2.772589f, 2.833213f, 2.890372f, 2.944439f, 2.995732f,
     3.044522f, 3.091043f, 3.135494f, 3.178054f, 3.218876f, 3.258097f, 3.295837f,
     3.332205f, 3.367296f, 3.401197f, 3.433987f, 3.465736f, 3.496507f, 3.526361f,
@@ -51,7 +46,6 @@ constexpr std::array<float, 129> log_table = {
     4.718499f, 4.727388f, 4.736198f, 4.744932f, 4.753591f, 4.762174f, 4.770685f,
     4.779124f, 4.787492f, 4.795791f, 4.804021f, 4.812184f, 4.820282f, 4.828314f,
     4.836282f, 4.844187f, 4.852030f};
-// clang-format on
 
 }  // namespace
 
diff --git a/modules/audio_processing/three_band_filter_bank.cc b/modules/audio_processing/three_band_filter_bank.cc
index a04852a4c7..291026ca44 100644
--- a/modules/audio_processing/three_band_filter_bank.cc
+++ b/modules/audio_processing/three_band_filter_bank.cc
@@ -34,7 +34,6 @@
 
 #include <algorithm>
 #include <array>
-#include <numbers>
 
 #include "api/array_view.h"
 #include "rtc_base/checks.h"
@@ -91,21 +90,17 @@ const float
 constexpr int kZeroFilterIndex1 = 3;
 constexpr int kZeroFilterIndex2 = 9;
 
-constexpr float kSqrt3 = std::numbers::sqrt3_v<float>;
-
-// clang-format off
 const float kDctModulation[ThreeBandFilterBank::kNumNonZeroFilters][kDctSize] =
     {{2.f, 2.f, 2.f},
-     {kSqrt3, 0.f, -kSqrt3},
+     {1.73205077f, 0.f, -1.73205077f},
      {1.f, -2.f, 1.f},
      {-1.f, 2.f, -1.f},
-     {-kSqrt3, 0.f, kSqrt3},
+     {-1.73205077f, 0.f, 1.73205077f},
      {-2.f, -2.f, -2.f},
-     {-kSqrt3, 0.f, kSqrt3},
+     {-1.73205077f, 0.f, 1.73205077f},
      {-1.f, 2.f, -1.f},
      {1.f, -2.f, 1.f},
-     {kSqrt3, 0.f, -kSqrt3}};
-// clang-format on
+     {1.73205077f, 0.f, -1.73205077f}};
 
 // Filters the input signal `in` with the filter `filter` using a shift by
 // `in_shift`, taking into account the previous state.
diff --git a/rtc_base/numerics/event_based_exponential_moving_average.cc b/rtc_base/numerics/event_based_exponential_moving_average.cc
index 419902dc52..27b2066a97 100644
--- a/rtc_base/numerics/event_based_exponential_moving_average.cc
+++ b/rtc_base/numerics/event_based_exponential_moving_average.cc
@@ -13,7 +13,6 @@
 #include <cmath>
 #include <cstdint>
 #include <limits>
-#include <numbers>
 
 #include "rtc_base/checks.h"
 
@@ -36,7 +35,7 @@ EventBasedExponentialMovingAverage::EventBasedExponentialMovingAverage(
 }
 
 void EventBasedExponentialMovingAverage::SetHalfTime(int half_time) {
-  tau_ = static_cast<double>(half_time) / std::numbers::ln2;
+  tau_ = static_cast<double>(half_time) / log(2);
   Reset();
 }
 
diff --git a/rtc_base/random.cc b/rtc_base/random.cc
index 319ad72177..3e0cc45262 100644
--- a/rtc_base/random.cc
+++ b/rtc_base/random.cc
@@ -12,7 +12,6 @@
 #include <math.h>
 
 #include <cstdint>
-#include <numbers>
 
 #include "rtc_base/checks.h"
 #include "rtc_base/numerics/safe_conversions.h"
@@ -74,7 +73,7 @@ double Random::Gaussian(double mean, double standard_deviation) {
   // interval (0, 1]. Note that we rely on NextOutput to generate integers
   // in the range [1, 2^64-1]. Normally this behavior is a bit frustrating,
   // but here it is exactly what we need.
-  const double kPi = std::numbers::pi;
+  const double kPi = 3.14159265358979323846;
   double u1 = static_cast<double>(NextOutput()) /
               static_cast<double>(0xFFFFFFFFFFFFFFFFull);
   double u2 = static_cast<double>(NextOutput()) /
