diff --git a/include/fmt/format-inl.h b/include/fmt/format-inl.h index be1ddf40..2bc5a9ac 100644 --- a/include/fmt/format-inl.h +++ b/include/fmt/format-inl.h @@ -244,11 +244,6 @@ const typename basic_data::digit_pair basic_data::digits[] = { {'9', '0'}, {'9', '1'}, {'9', '2'}, {'9', '3'}, {'9', '4'}, {'9', '5'}, {'9', '6'}, {'9', '7'}, {'9', '8'}, {'9', '9'}}; -#define FMT_POWERS_OF_10(factor) \ - factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ - (factor)*1000000, (factor)*10000000, (factor)*100000000, \ - (factor)*1000000000 - template const uint64_t basic_data::powers_of_10_64[] = { 1, FMT_POWERS_OF_10(1), FMT_POWERS_OF_10(1000000000ULL), @@ -263,8 +258,7 @@ const uint64_t basic_data::zero_or_powers_of_10_64[] = { 10000000000000000000ULL}; template -const uint32_t basic_data::zero_or_powers_of_10_32_new[] = { - 0, 0, FMT_POWERS_OF_10(1)}; +constexpr uint32_t basic_data::zero_or_powers_of_10_32_new[]; template const uint64_t basic_data::zero_or_powers_of_10_64_new[] = { diff --git a/include/fmt/format.h b/include/fmt/format.h index 8d3ed6f9..53094c1a 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1024,10 +1024,16 @@ template struct FMT_EXTERN_TEMPLATE_API divtest_table_entry { T max_quotient; }; +#define FMT_POWERS_OF_10(factor) \ + factor * 10u, (factor)*100u, (factor)*1000u, (factor)*10000u, \ + (factor)*100000u, (factor)*1000000u, (factor)*10000000u, \ + (factor)*100000000u, (factor)*1000000000u + // Static data is placed in this class template for the header-only config. template struct FMT_EXTERN_TEMPLATE_API basic_data { static const uint64_t powers_of_10_64[]; - static const uint32_t zero_or_powers_of_10_32_new[]; + static constexpr uint32_t zero_or_powers_of_10_32_new[] = { + 0, 0, FMT_POWERS_OF_10(1)}; static const uint64_t zero_or_powers_of_10_64_new[]; static const uint64_t grisu_pow10_significands[]; static const int16_t grisu_pow10_exponents[];