// RUN: %check_clang_tidy -check-suffix=ALL -std=c++20 %s modernize-use-std-numbers %t // RUN: %check_clang_tidy -check-suffix=ALL,IMPRECISE -std=c++20 %s modernize-use-std-numbers %t -- -config="{CheckOptions: { modernize-use-std-numbers.DiffThreshold: 0.01 }}" // CHECK-FIXES-ALL: #include namespace bar { double sqrt(double Arg); float sqrt(float Arg); template auto sqrt(T val) { return sqrt(static_cast(val)); } static constexpr double e = 2.718281828459045235360287471352662497757247093; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal, differs by '0.00e+00' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double e = std::numbers::e; } double exp(double Arg); double log(double Arg); double log2(double Arg); float log2(float Arg); template auto log2(T val) { return log2(static_cast(val)); } double log10(double Arg); template void sink(T&&) { } void floatSink(float) {} #define MY_PI 3.1415926 #define INV_SQRT3 1 / bar::sqrt(3) #define NOT_INV_SQRT3 1 / bar::sqrt(3) + 1 using my_double = double; using my_float = float; void foo(){ static constexpr double Pi = 3.1415926; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:34: warning: prefer 'std::numbers::pi' to this literal, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Pi = std::numbers::pi; static constexpr double Euler = 2.7182818; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Euler = std::numbers::e; static constexpr double Phi = 1.6180339; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Phi = std::numbers::phi; static constexpr double PiCopy = Pi; static constexpr double PiDefineFromMacro = MY_PI; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:49: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double PiDefineFromMacro = std::numbers::pi; static constexpr double Pi2 = 3.14; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr double Pi2 = std::numbers::pi; static constexpr double Euler2 = 2.71; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal, differs by '8.28e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr double Euler2 = std::numbers::e; static constexpr double Phi2 = 1.61; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi' to this literal, differs by '8.03e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr double Phi2 = std::numbers::phi; static constexpr double Pi3 = 3.1415926L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:35: warning: prefer 'std::numbers::pi_v' to this literal, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Pi3 = std::numbers::pi_v; static constexpr double Euler3 = 2.7182818L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e_v' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Euler3 = std::numbers::e_v; static constexpr double Phi3 = 1.6180339L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:36: warning: prefer 'std::numbers::phi_v' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double Phi3 = std::numbers::phi_v; static constexpr long double Pi4 = 3.1415926L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::pi_v' to this literal, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr long double Pi4 = std::numbers::pi_v; static constexpr long double Euler4 = 2.7182818L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:43: warning: prefer 'std::numbers::e_v' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr long double Euler4 = std::numbers::e_v; static constexpr long double Phi4 = 1.6180339L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::phi_v' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr long double Phi4 = std::numbers::phi_v; static constexpr my_double Euler5 = 2.7182818; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:41: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr my_double Euler5 = std::numbers::e; static constexpr my_float Euler6 = 2.7182818; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:40: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr my_float Euler6 = std::numbers::e; static constexpr int NotEuler7 = 2.7182818; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:38: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr int NotEuler7 = std::numbers::e; static constexpr double InvPi = 1.0 / Pi; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:37: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr double InvPi = std::numbers::inv_pi; static constexpr my_float Actually2MyFloat = 2; bar::sqrt(Actually2MyFloat); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2_v; sink(MY_PI); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::pi); auto X = 42.0; auto Y = X * 3.14; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:18: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: auto Y = X * std::numbers::pi; constexpr static auto One = 1; constexpr static auto Two = 2; bar::sqrt(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; bar::sqrt(Two); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; bar::sqrt(2.0); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; auto Not2 = 2; Not2 = 42; bar::sqrt(Not2); const auto Actually2 = 2; bar::sqrt(Actually2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; exp(1); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::e; exp(One); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::e; exp(1.00000000000001); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::e; log2(exp(1)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; log2(Euler); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; log2(bar::e); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; log2(Euler5); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; log2(Euler6); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e_v; log2(NotEuler7); auto log2e = 1.4426950; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:18: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: auto log2e = std::numbers::log2e; floatSink(log2(Euler)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e); floatSink(static_cast(log2(Euler))); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v); floatSink(1.4426950); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e); floatSink(static_cast(1.4426950)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v' to this literal, differs by '4.09e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v); floatSink(log2(static_cast(Euler))); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v); floatSink(static_cast(log2(static_cast(Euler)))); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v); floatSink(static_cast(log2(static_cast(Euler)))); floatSink(static_cast(log2(static_cast(Euler)))); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(static_cast(std::numbers::log2e_v)); floatSink(1.4426950F); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e_v' to this literal, differs by '1.93e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e_v); floatSink(static_cast(1.4426950F)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '1.93e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(std::numbers::log2e); floatSink(static_cast(1.4426950F)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::log2e_v' to this literal, differs by '1.93e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: floatSink(static_cast(std::numbers::log2e_v)); log10(exp(1)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log10e; log10(Euler); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log10e; log10(bar::e); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log10e; auto log10e = .434294; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::log10e' to this literal, differs by '4.82e-07' [modernize-use-std-numbers] // CHECK-FIXES-ALL: auto log10e = std::numbers::log10e; auto egamma = 0.5772156 * 42; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:19: warning: prefer 'std::numbers::egamma' to this literal, differs by '6.49e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: auto egamma = std::numbers::egamma * 42; sink(InvPi); sink(1 / Pi); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_pi' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_pi); sink(1 / bar::sqrt(Pi)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi); sink(1 / bar::sqrt(MY_PI)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi); log(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::ln2; log(10); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::ln10; bar::sqrt(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; sink(1 / bar::sqrt(3)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3); sink(INV_SQRT3); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this macro [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3); sink(NOT_INV_SQRT3); const auto inv_sqrt3f = .577350269F; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::inv_sqrt3_v' to this literal, differs by '1.04e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: const auto inv_sqrt3f = std::numbers::inv_sqrt3_v; bar::sqrt(3); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt3; auto somePhi = 1.6180339; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:20: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: auto somePhi = std::numbers::phi; sink(Phi); sink((42 + bar::sqrt(5)) / 2); sink((1 + bar::sqrt(5)) / 2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::phi); sink((bar::sqrt(5.0F) + 1) / 2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::phi_v); } template void baz(){ static constexpr T Pi = 3.1415926; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:29: warning: prefer 'std::numbers::pi' to this literal, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Pi = std::numbers::pi; static constexpr T Euler = 2.7182818; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:32: warning: prefer 'std::numbers::e' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Euler = std::numbers::e; static constexpr T Phi = 1.6180339; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Phi = std::numbers::phi; static constexpr T PiCopy = Pi; static constexpr T PiDefineFromMacro = MY_PI; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:44: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T PiDefineFromMacro = std::numbers::pi; static constexpr T Pi2 = 3.14; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi' to this literal, differs by '1.59e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr T Pi2 = std::numbers::pi; static constexpr T Euler2 = 2.71; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e' to this literal, differs by '8.28e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr T Euler2 = std::numbers::e; static constexpr T Phi2 = 1.61; // CHECK-MESSAGES-IMPRECISE: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi' to this literal, differs by '8.03e-03' [modernize-use-std-numbers] // CHECK-FIXES-IMPRECISE: static constexpr T Phi2 = std::numbers::phi; static constexpr T Pi3 = 3.1415926L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:30: warning: prefer 'std::numbers::pi_v' to this literal, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Pi3 = std::numbers::pi_v; static constexpr T Euler3 = 2.7182818L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:33: warning: prefer 'std::numbers::e_v' to this literal, differs by '2.85e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Euler3 = std::numbers::e_v; static constexpr T Phi3 = 1.6180339L; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:31: warning: prefer 'std::numbers::phi_v' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: static constexpr T Phi3 = std::numbers::phi_v; static constexpr my_float Actually2MyFloat = 2; bar::sqrt(Actually2MyFloat); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2_v; constexpr static T One = 1; constexpr static T Two = 2; bar::sqrt(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; bar::sqrt(Two); bar::sqrt(2.0); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; T Not2 = 2; Not2 = 42; bar::sqrt(Not2); const T Actually2 = 2; bar::sqrt(Actually2); exp(1); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::e; exp(One); exp(1.00000000000001); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::e; log2(exp(1)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:10: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; log2(Euler); log2(bar::e); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log2e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log2e; T log2e = 1.4426950; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:15: warning: prefer 'std::numbers::log2e' to this literal, differs by '4.09e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: T log2e = std::numbers::log2e; log10(exp(1)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:11: warning: prefer 'std::numbers::e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log10e; log10(Euler); log10(bar::e); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::log10e' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::log10e; T log10e = .434294; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::log10e' to this literal, differs by '4.82e-07' [modernize-use-std-numbers] // CHECK-FIXES-ALL: T log10e = std::numbers::log10e; T egamma = 0.5772156 * 42; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:16: warning: prefer 'std::numbers::egamma' to this literal, differs by '6.49e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: T egamma = std::numbers::egamma * 42; sink(1 / Pi); sink(1 / bar::sqrt(Pi)); sink(1 / bar::sqrt(MY_PI)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrtpi' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:24: warning: prefer 'std::numbers::pi' to this macro, differs by '5.36e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrtpi); log(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::ln2; log(10); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::ln10' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::ln10; bar::sqrt(2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt2' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt2; sink(1 / bar::sqrt(3)); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::inv_sqrt3' to this formula [modernize-use-std-numbers] // CHECK-MESSAGES-ALL: :[[@LINE-2]]:14: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::inv_sqrt3); bar::sqrt(3); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:5: warning: prefer 'std::numbers::sqrt3' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: std::numbers::sqrt3; T phi = 1.6180339; // CHECK-MESSAGES-ALL: :[[@LINE-1]]:13: warning: prefer 'std::numbers::phi' to this literal, differs by '8.87e-08' [modernize-use-std-numbers] // CHECK-FIXES-ALL: T phi = std::numbers::phi; sink((42 + bar::sqrt(5)) / 2); sink((1 + bar::sqrt(5)) / 2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::phi); sink((bar::sqrt(5.0F) + 1) / 2); // CHECK-MESSAGES-ALL: :[[@LINE-1]]:10: warning: prefer 'std::numbers::phi_v' to this formula [modernize-use-std-numbers] // CHECK-FIXES-ALL: sink(std::numbers::phi_v); } template void foobar(){ const T Two = 2; bar::sqrt(Two); } void use_templates() { foobar(); foobar(); baz(); baz(); } #define BIG_MARCO \ struct InvSqrt3 { \ template static T get() { return 1 / bar::sqrt(3); } \ } BIG_MARCO; void use_BIG_MACRO() { InvSqrt3 f{}; f.get(); f.get(); }