AsmGrader 0.0.0
Loading...
Searching...
No Matches
unknown.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <fmt/base.h>
4#include <fmt/format.h>
5#include <range/v3/iterator/concepts.hpp>
6
7#include <string>
8#include <string_view>
9#include <utility>
10
11namespace asmgrader {
12
13template <typename T>
14 requires(fmt::formattable<T>)
15inline std::string format_or_unknown(T&& value, fmt::format_string<T> fmt = "{}") {
16 return fmt::format(fmt::runtime(fmt.str), std::forward<T>(value));
17}
18
19template <typename T>
20 requires(!fmt::formattable<T>)
21inline std::string format_or_unknown(T&& /*value*/, fmt::format_string<std::string_view> fmt = "{}") {
22
23 return fmt::format(fmt::runtime(fmt.str), "<unknown>");
24}
25
26// fmt's iterators do not satisfy standard requirements
27template </*ranges::output_iterator<char>*/ typename OutputIt, typename T>
28 requires(fmt::formattable<T>)
29inline auto format_to_or_unknown(OutputIt&& out, T&& value, fmt::format_string<T> fmt = "{}") {
30 return fmt::format_to(std::forward<OutputIt>(out), fmt::runtime(fmt), std::forward<T>(value));
31}
32
33template </*ranges::output_iterator<char>*/ typename OutputIt, typename T>
34 requires(!fmt::formattable<T>)
35inline auto format_to_or_unknown(OutputIt&& out, T&& /*value*/, fmt::format_string<std::string_view> fmt = "{}") {
36 return fmt::format_to(std::forward<OutputIt>(out), fmt::runtime(fmt), "<unknown>");
37}
38
39} // namespace asmgrader
Definition asm_buffer.hpp:20
auto format_to_or_unknown(OutputIt &&out, T &&value, fmt::format_string< T > fmt="{}")
Definition unknown.hpp:29
std::string format_or_unknown(T &&value, fmt::format_string< T > fmt="{}")
Definition unknown.hpp:15