18 template<
class T,
class O>
19 O
format(
const T& value, std::basic_format_context<O, Char>& ctx)
const {
20 std::basic_stringstream<Char> ss;
22#if defined(_LIBCPP_VERSION) && _LIBCPP_VERSION < 170000
23 return std::formatter<std::basic_string_view<Char>, Char>
::format(ss.str(), ctx);
25 return std::formatter<std::basic_string_view<Char>, Char>
::format(ss.view(), ctx);
36template<
class... Args>
void err (std::format_string<Args...> fmt, Args&&... args) { std::cerr << std::format(fmt, std::forward<Args>(args)...); }
37template<
class... Args>
void out (std::format_string<Args...> fmt, Args&&... args) { std::cout << std::format(fmt, std::forward<Args>(args)...); }
38template<
class... Args>
void errln(std::format_string<Args...> fmt, Args&&... args) { std::cerr << std::format(fmt, std::forward<Args>(args)...) << std::endl; }
39template<
class... Args>
void outln(std::format_string<Args...> fmt, Args&&... args) { std::cout << std::format(fmt, std::forward<Args>(args)...) << std::endl; }
52 size_t indent()
const {
return indent_; }
53 std::string_view
tab()
const {
return tab_; }
76 Tab operator--(
int) { assert(indent_ > 0);
auto res = *
this; --indent_;
return res; }
83 for (
size_t i = 0; i !=
tab.indent_; ++i)
89 std::string_view tab_;
Keeps track of indentation level during output.
Tab operator-(size_t indent) const
Tab & operator-=(size_t indent)
friend std::ostream & operator<<(std::ostream &os, Tab tab)
Tab(std::string_view tab={"\t"}, size_t indent=0)
Tab operator+(size_t indent) const
Tab & operator+=(size_t indent)
Tab & operator=(std::string tab)
Tab & operator=(size_t indent)
std::string_view tab() const
void errln(std::format_string< Args... > fmt, Args &&... args)
void err(std::format_string< Args... > fmt, Args &&... args)
void outln(std::format_string< Args... > fmt, Args &&... args)
void out(std::format_string< Args... > fmt, Args &&... args)