Skip to content

Commit 23e0ccb

Browse files
committed
Add format_string
1 parent d89bddd commit 23e0ccb

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/eckit/format/Format.h

+12-9
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,17 @@
4141

4242
namespace eckit {
4343

44+
template<typename ...T>
45+
using format_string = fmt::format_string<T...>;
46+
4447
/// Format a string with compile time checks.
4548
/// @param formatString to use, see: <https://fmt.dev/11.1/syntax/> for description of syntax.
4649
/// Must be known at compiletime
4750
/// @param ... args to be upplied into formatString
4851
/// @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)...);
5255
}
5356

5457

@@ -58,9 +61,9 @@ std::string format(StringType&& formatString, Args&&... args) {
5861
/// Must be known at compiletime
5962
/// @param ... args to be upplied into formatString
6063
/// @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)...);
6467
}
6568

6669
/// Format a string with compile time checks to an ostream
@@ -69,10 +72,10 @@ void format_to(OutputIt&& outputIt, StringType&& formatString, Args&&... args) {
6972
/// Must be known at compiletime
7073
/// @param ... args to be upplied into formatString
7174
/// @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) {
7477
// 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)...);
7679
}
7780

7881

0 commit comments

Comments
 (0)