41
41
42
42
namespace eckit {
43
43
44
+ template <typename ...T>
45
+ using format_string = fmt::format_string<T...>;
46
+
44
47
// / Format a string with compile time checks.
45
48
// / @param formatString to use, see: <https://fmt.dev/11.1/syntax/> for description of syntax.
46
49
// / Must be known at compiletime
47
50
// / @param ... args to be upplied into formatString
48
51
// / @throws fmt::format_error
49
- template <typename StringType, typename ... Args>
50
- std::string format (StringType&& formatString, Args&&... args) {
51
- return fmt::format (fmt::runtime (std::forward<StringType> (formatString)), std::forward<Args>(args)...);
52
+ template <typename ... Args>
53
+ std::string format (format_string<Args...> formatString, Args&&... args) {
54
+ return fmt::format (fmt::runtime (std::move (formatString)), std::forward<Args>(args)...);
52
55
}
53
56
54
57
@@ -58,9 +61,9 @@ std::string format(StringType&& formatString, Args&&... args) {
58
61
// / Must be known at compiletime
59
62
// / @param ... args to be upplied into formatString
60
63
// / @throws fmt::format_error
61
- template <typename OutputIt, typename StringType, typename ... Args, std::enable_if_t <!std::is_base_of_v<std::ostream, std::decay_t <OutputIt>>, bool > = true >
62
- void format_to (OutputIt&& outputIt, StringType&& formatString, Args&&... args) {
63
- fmt::format_to (std::forward<OutputIt>(outputIt), fmt::runtime (std::forward<StringType> (formatString)), std::forward<Args>(args)...);
64
+ template <typename OutputIt, typename ... Args, std::enable_if_t <!std::is_base_of_v<std::ostream, std::decay_t <OutputIt>>, bool > = true >
65
+ void format_to (OutputIt&& outputIt, format_string<Args...> formatString, Args&&... args) {
66
+ fmt::format_to (std::forward<OutputIt>(outputIt), fmt::runtime (std::move (formatString)), std::forward<Args>(args)...);
64
67
}
65
68
66
69
// / Format a string with compile time checks to an ostream
@@ -69,10 +72,10 @@ void format_to(OutputIt&& outputIt, StringType&& formatString, Args&&... args) {
69
72
// / Must be known at compiletime
70
73
// / @param ... args to be upplied into formatString
71
74
// / @throws fmt::format_error
72
- template <typename StringType, typename ... Args>
73
- void format_to (std::ostream& os, StringType&& formatString, Args&&... args) {
75
+ template <typename ... Args>
76
+ void format_to (std::ostream& os, format_string<Args...> formatString, Args&&... args) {
74
77
// Have to either use `const char&` or `const wchar_t&` here
75
- fmt::format_to (std::ostream_iterator<const char &>(os), fmt::runtime (std::forward<StringType> (formatString)), std::forward<Args>(args)...);
78
+ fmt::format_to (std::ostream_iterator<const char &>(os), fmt::runtime (std::move (formatString)), std::forward<Args>(args)...);
76
79
}
77
80
78
81
0 commit comments