10#include "ll/api/base/Concepts.h"
14template <ll::concepts::Stringable T>
15std::string to_string(T
const& t) {
16 if constexpr (
requires { t.toString(); }) {
18 }
else if constexpr (
requires { t.to_string(); }) {
21 static_assert(ll::traits::always_false<T>,
"T must be a stringable type");
27template <ll::concepts::Stringable T>
28std::ostream& operator<<(std::ostream& os, T
const& t) {
29 return os << nonstd::to_string(t);
33template <ll::concepts::Stringable T>
34struct fmt::formatter<T> : fmt::formatter<std::string> {
35 template <
class FormatContext>
36 auto format(T
const& t, FormatContext&
ctx)
const {
37 return formatter<std::string>::format(nonstd::to_string(t),
ctx);
42template <ll::concepts::Stringable T>
43struct std::formatter<T> : std::formatter<std::string> {
44 template <
class FormatContext>
45 auto format(T
const& t, FormatContext&
ctx)
const {
46 return std::formatter<std::string>::format(nonstd::to_string(t),
ctx);