diff --git a/src/core/include/mp-units/bits/core_gmf.h b/src/core/include/mp-units/bits/core_gmf.h index 261baca5..dfb93961 100644 --- a/src/core/include/mp-units/bits/core_gmf.h +++ b/src/core/include/mp-units/bits/core_gmf.h @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include diff --git a/src/core/include/mp-units/bits/text_tools.h b/src/core/include/mp-units/bits/text_tools.h index 0f79b0ad..dccd3e91 100644 --- a/src/core/include/mp-units/bits/text_tools.h +++ b/src/core/include/mp-units/bits/text_tools.h @@ -95,7 +95,7 @@ constexpr Out copy(const symbol_text& txt, text_encoding encoding, Out out { if (encoding == text_encoding::unicode) { if constexpr (is_same_v) - return copy(txt.unicode(), out).out; + return ::mp_units::detail::copy(txt.unicode().begin(), txt.unicode().end(), out); else if constexpr (is_same_v) { for (const char8_t ch : txt.unicode()) *out++ = static_cast(ch); return out; @@ -103,7 +103,7 @@ constexpr Out copy(const symbol_text& txt, text_encoding encoding, Out out throw std::invalid_argument("Unicode text can't be copied to CharT output"); } else { if constexpr (is_same_v) - return copy(txt.ascii(), out).out; + return ::mp_units::detail::copy(txt.ascii().begin(), txt.ascii().end(), out); else throw std::invalid_argument("ASCII text can't be copied to CharT output"); } diff --git a/src/core/include/mp-units/ext/algorithm.h b/src/core/include/mp-units/ext/algorithm.h index 6c60443c..1d5a7d67 100644 --- a/src/core/include/mp-units/ext/algorithm.h +++ b/src/core/include/mp-units/ext/algorithm.h @@ -31,7 +31,6 @@ #include #include #include -#include #endif namespace mp_units::detail { @@ -164,44 +163,11 @@ constexpr const T& min(const T& a, const T& b) return (b < a) ? b : a; } -template -struct in_out_result { - [[no_unique_address]] I in; - [[no_unique_address]] O out; - - template - requires std::convertible_to && std::convertible_to - constexpr operator in_out_result() const& - { - return {in, out}; - } - - template - requires std::convertible_to && std::convertible_to - constexpr operator in_out_result() && - { - return {std::move(in), std::move(out)}; - } -}; - -template -using copy_result = in_out_result; - -template S, std::weakly_incrementable O> - requires std::indirectly_copyable -constexpr copy_result copy(I first, S last, O result) +template +constexpr OutputIt copy(InputIt first, InputIt last, OutputIt d_first) { - for (; first != last; ++first, (void)++result) { - *result = *first; - } - return {std::move(first), std::move(result)}; -} - -template - requires std::indirectly_copyable, O> -constexpr copy_result, O> copy(R&& r, O result) -{ - return ::mp_units::detail::copy(std::ranges::begin(r), std::ranges::end(r), std::move(result)); + for (; first != last; (void)++first, (void)++d_first) *d_first = *first; + return d_first; } } // namespace mp_units::detail diff --git a/src/core/include/mp-units/format.h b/src/core/include/mp-units/format.h index d5a3c291..544ce69c 100644 --- a/src/core/include/mp-units/format.h +++ b/src/core/include/mp-units/format.h @@ -319,7 +319,7 @@ class MP_UNITS_STD_FMT::formatter, Char> { out = MP_UNITS_STD_FMT::vformat_to(out, locale, f.dimension_format_str_, MP_UNITS_STD_FMT::make_format_args(q.dimension)); } - void on_text(const Char* begin, const Char* end) const { std::copy(begin, end, out); } + void on_text(const Char* begin, const Char* end) const { mp_units::detail::copy(begin, end, out); } }; template quantity_formatter(const formatter&, OutputIt, Args...) -> quantity_formatter; diff --git a/src/core/include/mp-units/framework/unit.h b/src/core/include/mp-units/framework/unit.h index 0c3b7aa6..ce9484a2 100644 --- a/src/core/include/mp-units/framework/unit.h +++ b/src/core/include/mp-units/framework/unit.h @@ -720,7 +720,8 @@ constexpr Out print_separator(Out out, const unit_symbol_formatting& fmt) if (fmt.encoding != text_encoding::unicode) throw std::invalid_argument( "'unit_symbol_separator::half_high_dot' can be only used with 'text_encoding::unicode'"); - out = copy(std::string_view("⋅"), out).out; + const std::string_view dot = "⋅"; + out = detail::copy(dot.begin(), dot.end(), out); } else { *out++ = ' '; }