diff --git a/src/core-fmt/include/units/bits/fmt.h b/src/core-fmt/include/units/bits/fmt.h index 7faa182a..10bd84d9 100644 --- a/src/core-fmt/include/units/bits/fmt.h +++ b/src/core-fmt/include/units/bits/fmt.h @@ -352,7 +352,7 @@ template S, typename Handler> if (p != begin) { auto c = *begin; if (c == '{') throw STD_FMT::format_error("invalid fill character '{'"); - handler.on_fill(std::basic_string_view>(begin, static_cast(p - begin))); + handler.on_fill(std::basic_string_view>(&*begin, static_cast(p - begin))); begin = p + 1; } else ++begin; diff --git a/src/core-fmt/include/units/format.h b/src/core-fmt/include/units/format.h index d02c36d2..f90d697b 100644 --- a/src/core-fmt/include/units/format.h +++ b/src/core-fmt/include/units/format.h @@ -305,7 +305,7 @@ template struct STD_FMT::formatter, CharT> { private: using quantity = units::quantity; - using iterator = TYPENAME STD_FMT::basic_format_parse_context::iterator; + using const_iterator = TYPENAME STD_FMT::basic_format_parse_context::const_iterator; bool quantity_value = false; bool quantity_unit = false; @@ -356,12 +356,16 @@ private: f.specs.rep.dynamic_precision_index = units::detail::on_dynamic_arg(t, context); } - constexpr void on_text(const CharT*, const CharT*) {} - constexpr void on_quantity_value(const CharT* begin, const CharT* end) + template S> + constexpr void on_text(It, S) {} + + template S> + constexpr void on_quantity_value(It begin, S end) { if (begin != end) units::detail::parse_units_rep(begin, end, *this, units::treat_as_floating_point); f.quantity_value = true; } + constexpr void on_quantity_unit(CharT mod) { if (mod != 'q') on_unit_modifier(mod); @@ -369,7 +373,7 @@ private: } }; - [[nodiscard]] constexpr std::pair do_parse(STD_FMT::basic_format_parse_context& ctx) + [[nodiscard]] constexpr std::pair do_parse(STD_FMT::basic_format_parse_context& ctx) { auto begin = ctx.begin(); auto end = ctx.end(); @@ -423,7 +427,7 @@ public: [[nodiscard]] constexpr auto parse(STD_FMT::basic_format_parse_context& ctx) { auto range = do_parse(ctx); - format_str = std::basic_string_view(range.first, static_cast(range.second - range.first)); + format_str = std::basic_string_view(&*range.first, static_cast(range.second - range.first)); return range.second; }