Add tests for FMT_ENFORCE_COMPILE_STRING, fix several errors (#2038)
This commit is contained in:
+17
-15
@@ -777,19 +777,16 @@ inline std::chrono::duration<Rep, std::milli> get_milliseconds(
|
||||
template <typename Char, typename Rep, typename OutputIt,
|
||||
FMT_ENABLE_IF(std::is_integral<Rep>::value)>
|
||||
OutputIt format_duration_value(OutputIt out, Rep val, int) {
|
||||
static FMT_CONSTEXPR_DECL const Char format[] = {'{', '}', 0};
|
||||
return format_to(out, compile_string_to_view(format), val);
|
||||
return write<Char>(out, val);
|
||||
}
|
||||
|
||||
template <typename Char, typename Rep, typename OutputIt,
|
||||
FMT_ENABLE_IF(std::is_floating_point<Rep>::value)>
|
||||
OutputIt format_duration_value(OutputIt out, Rep val, int precision) {
|
||||
static FMT_CONSTEXPR_DECL const Char pr_f[] = {'{', ':', '.', '{',
|
||||
'}', 'f', '}', 0};
|
||||
if (precision >= 0)
|
||||
return format_to(out, compile_string_to_view(pr_f), val, precision);
|
||||
static FMT_CONSTEXPR_DECL const Char fp_f[] = {'{', ':', 'g', '}', 0};
|
||||
return format_to(out, compile_string_to_view(fp_f), val);
|
||||
basic_format_specs<Char> specs;
|
||||
specs.precision = precision;
|
||||
specs.type = precision > 0 ? 'f' : 'g';
|
||||
return write<Char>(out, val, specs);
|
||||
}
|
||||
|
||||
template <typename Char, typename OutputIt>
|
||||
@@ -809,13 +806,18 @@ template <typename Char, typename Period, typename OutputIt>
|
||||
OutputIt format_duration_unit(OutputIt out) {
|
||||
if (const char* unit = get_units<Period>())
|
||||
return copy_unit(string_view(unit), out, Char());
|
||||
static FMT_CONSTEXPR_DECL const Char num_f[] = {'[', '{', '}', ']', 's', 0};
|
||||
if (const_check(Period::den == 1))
|
||||
return format_to(out, compile_string_to_view(num_f), Period::num);
|
||||
static FMT_CONSTEXPR_DECL const Char num_def_f[] = {'[', '{', '}', '/', '{',
|
||||
'}', ']', 's', 0};
|
||||
return format_to(out, compile_string_to_view(num_def_f), Period::num,
|
||||
Period::den);
|
||||
|
||||
*out++ = '[';
|
||||
out = write<Char>(out, Period::num);
|
||||
|
||||
if (const_check(Period::den != 1)) {
|
||||
*out++ = '/';
|
||||
out = write<Char>(out, Period::den);
|
||||
}
|
||||
|
||||
*out++ = ']';
|
||||
*out++ = 's';
|
||||
return out;
|
||||
}
|
||||
|
||||
template <typename FormatContext, typename OutputIt, typename Rep,
|
||||
|
||||
Reference in New Issue
Block a user