From fe4064a816a51a0f3e2ff55ac2083b97c0d74d2e Mon Sep 17 00:00:00 2001 From: Alexey Ochapov Date: Thu, 24 Dec 2020 03:33:00 +0300 Subject: [PATCH] remove fallback to `inline` in FMT_CONSTEXPR(20), place needed `inline` specifiers in headers --- include/fmt/chrono.h | 72 ++++++++++++++++++++++++++++++++------------ include/fmt/color.h | 7 +++-- include/fmt/core.h | 2 +- include/fmt/format.h | 24 +++++++++------ 4 files changed, 72 insertions(+), 33 deletions(-) diff --git a/include/fmt/chrono.h b/include/fmt/chrono.h index 0e06e18c..d68e8148 100644 --- a/include/fmt/chrono.h +++ b/include/fmt/chrono.h @@ -456,27 +456,61 @@ namespace detail { template FMT_CONSTEXPR const char* get_units() { return nullptr; } -template <> FMT_CONSTEXPR const char* get_units() { return "as"; } -template <> FMT_CONSTEXPR const char* get_units() { return "fs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ps"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ns"; } -template <> FMT_CONSTEXPR const char* get_units() { return "µs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ms"; } -template <> FMT_CONSTEXPR const char* get_units() { return "cs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ds"; } -template <> FMT_CONSTEXPR const char* get_units>() { return "s"; } -template <> FMT_CONSTEXPR const char* get_units() { return "das"; } -template <> FMT_CONSTEXPR const char* get_units() { return "hs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "ks"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ms"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Gs"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ts"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Ps"; } -template <> FMT_CONSTEXPR const char* get_units() { return "Es"; } -template <> FMT_CONSTEXPR const char* get_units>() { +template <> FMT_CONSTEXPR inline const char* get_units() { + return "as"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "fs"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "ps"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "ns"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "µs"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "ms"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "cs"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "ds"; +} +template <> FMT_CONSTEXPR inline const char* get_units>() { + return "s"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "das"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "hs"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "ks"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "Ms"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "Gs"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "Ts"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "Ps"; +} +template <> FMT_CONSTEXPR inline const char* get_units() { + return "Es"; +} +template <> FMT_CONSTEXPR inline const char* get_units>() { return "m"; } -template <> FMT_CONSTEXPR const char* get_units>() { +template <> FMT_CONSTEXPR inline const char* get_units>() { return "h"; } diff --git a/include/fmt/color.h b/include/fmt/color.h index 42008f51..24ccedac 100644 --- a/include/fmt/color.h +++ b/include/fmt/color.h @@ -353,16 +353,17 @@ class text_style { }; /** Creates a text style from the foreground (text) color. */ -FMT_CONSTEXPR text_style fg(detail::color_type foreground) FMT_NOEXCEPT { +FMT_CONSTEXPR inline text_style fg(detail::color_type foreground) FMT_NOEXCEPT { return text_style(true, foreground); } /** Creates a text style from the background color. */ -FMT_CONSTEXPR text_style bg(detail::color_type background) FMT_NOEXCEPT { +FMT_CONSTEXPR inline text_style bg(detail::color_type background) FMT_NOEXCEPT { return text_style(false, background); } -FMT_CONSTEXPR text_style operator|(emphasis lhs, emphasis rhs) FMT_NOEXCEPT { +FMT_CONSTEXPR inline text_style operator|(emphasis lhs, + emphasis rhs) FMT_NOEXCEPT { return text_style(lhs) | rhs; } diff --git a/include/fmt/core.h b/include/fmt/core.h index dc2ca0b0..f2309b88 100644 --- a/include/fmt/core.h +++ b/include/fmt/core.h @@ -92,7 +92,7 @@ # define FMT_CONSTEXPR constexpr # define FMT_CONSTEXPR_DECL constexpr #else -# define FMT_CONSTEXPR inline +# define FMT_CONSTEXPR # define FMT_CONSTEXPR_DECL #endif diff --git a/include/fmt/format.h b/include/fmt/format.h index 580e9f29..f8e47dfb 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -287,7 +287,7 @@ namespace detail { (__cplusplus >= 201709L && FMT_GCC_VERSION >= 1002) # define FMT_CONSTEXPR20 constexpr #else -# define FMT_CONSTEXPR20 inline +# define FMT_CONSTEXPR20 #endif // An equivalent of `*reinterpret_cast(&source)` that doesn't have @@ -984,7 +984,7 @@ template FMT_CONSTEXPR int count_digits_fallback(T n) { #ifdef FMT_BUILTIN_CLZLL // Returns the number of decimal digits in n. Leading zeros are not counted // except for n == 0 in which case count_digits returns 1. -FMT_CONSTEXPR20 int count_digits(uint64_t n) { +FMT_CONSTEXPR20 inline int count_digits(uint64_t n) { if (is_constant_evaluated()) { return count_digits_fallback(n); } @@ -994,11 +994,13 @@ FMT_CONSTEXPR20 int count_digits(uint64_t n) { } #else // Fallback version of count_digits used when __builtin_clz is not available. -FMT_CONSTEXPR int count_digits(uint64_t n) { return count_digits_fallback(n); } +FMT_CONSTEXPR inline int count_digits(uint64_t n) { + return count_digits_fallback(n); +} #endif #if FMT_USE_INT128 -FMT_CONSTEXPR int count_digits(uint128_t n) { +FMT_CONSTEXPR inline int count_digits(uint128_t n) { int count = 1; for (;;) { // Integer division is slow so do it for a group of four digits instead @@ -1035,7 +1037,7 @@ template <> int count_digits<4>(detail::fallback_uintptr n); #ifdef FMT_BUILTIN_CLZ // Optional version of count_digits for better performance on 32-bit platforms. -FMT_CONSTEXPR20 int count_digits(uint32_t n) { +FMT_CONSTEXPR20 inline int count_digits(uint32_t n) { if (is_constant_evaluated()) { return count_digits_fallback(n); } @@ -4034,11 +4036,11 @@ FMT_CONSTEXPR detail::udl_formatter operator""_format() { std::string message = "The answer is {}"_format(42); \endrst */ -FMT_CONSTEXPR detail::udl_formatter operator"" _format(const char* s, - size_t n) { +FMT_CONSTEXPR inline detail::udl_formatter operator"" _format( + const char* s, size_t n) { return {{s, n}}; } -FMT_CONSTEXPR detail::udl_formatter operator"" _format( +FMT_CONSTEXPR inline detail::udl_formatter operator"" _format( const wchar_t* s, size_t n) { return {{s, n}}; } @@ -4054,10 +4056,12 @@ FMT_CONSTEXPR detail::udl_formatter operator"" _format( fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23); \endrst */ -FMT_CONSTEXPR detail::udl_arg operator"" _a(const char* s, size_t) { +FMT_CONSTEXPR inline detail::udl_arg operator"" _a(const char* s, + size_t) { return {s}; } -FMT_CONSTEXPR detail::udl_arg operator"" _a(const wchar_t* s, size_t) { +FMT_CONSTEXPR inline detail::udl_arg operator"" _a(const wchar_t* s, + size_t) { return {s}; } } // namespace literals