6#ifndef MIMICPP_PRINTING_STATE_CXX23_BACKPORTS_HPP
7#define MIMICPP_PRINTING_STATE_CXX23_BACKPORTS_HPP
15#ifndef MIMICPP_DETAIL_IS_MODULE
23namespace mimicpp::printing::detail::state
25 template <std::ranges::forward_range Range>
26 struct cxx23_backport_printer<Range>
28 template <pr
int_iterator OutIter>
29 static OutIter
print(OutIter out,
auto& range)
31 out = format::format_to(std::move(out),
"[");
32 auto iter = std::ranges::begin(range);
33 if (
const auto end = std::ranges::end(range);
38 for (; iter != end; ++iter)
40 out = format::format_to(std::move(out),
", ");
45 return format::format_to(std::move(out),
"]");
49 template <std::
size_t index, pr
int_iterator OutIter>
50 OutIter print_tuple_element(OutIter out,
auto& tuple)
52 if constexpr (0u != index)
54 out = format::format_to(std::move(out),
", ");
61 concept tuple_like =
requires {
62 typename std::tuple_size<T>::type;
63 { std::tuple_size_v<T> } -> std::convertible_to<std::size_t>;
64 requires 0u <= std::tuple_size_v<T>;
67 template <tuple_like T>
68 struct cxx23_backport_printer<T>
70 template <pr
int_iterator OutIter>
71 static OutIter
print(OutIter out,
auto& tuple)
73 out = format::format_to(std::move(out),
"(");
75 [&]<std::size_t... indices>([[maybe_unused]]
const std::index_sequence<indices...>) {
77 (out = state::print_tuple_element<indices>(std::move(out), tuple)));
79 std::make_index_sequence<std::tuple_size_v<T>>{});
81 return format::format_to(std::move(out),
")");
constexpr printing::PrintFn print
Functional object, converting the given object to its textual representation.
Definition Print.hpp:183