15template<
typename T0,
typename T1>
16requires(
requires (ostream &o, T0 t0, T1 t1) { o << t0; o << t1; })
17ostream &
operator<<(ostream &o,
const pair<T0, T1> &p) {
18 return o <<
'{' << p.first <<
", " << p.second <<
'}';
21template<
typename T,
size_t N>
22requires(
requires (ostream &o, T t) { o << t; })
23ostream &
operator<<(ostream &o,
const array<T, N> &
v) {
27 for(
auto b = cbegin(
v) + 1,
e = cend(
v); b !=
e; ++b)
32template<
typename T,
typename A>
33requires(
requires (ostream &o, T t) { o << t; })
34ostream &
operator<<(ostream &o,
const vector<T, A> &
v) {
38 for(
auto b = cbegin(
v) + 1,
e = cend(
v); b !=
e; ++b)
49template<
template<
typename>
typename V,
typename T, std::size_t N>
58template<
template<
typename>
typename V,
typename T, std::size_t N>
61 for(std::size_t i = 1; i < N; ++i)
67 return os <<
"{" <<
m[0] <<
", " <<
m[1] <<
", " <<
m[2] <<
"}";
73 <<
m[0] <<
", " <<
m[1] <<
", "
74 <<
m[2] <<
", " <<
m[3]
79 return os <<
"{" <<
v.pos <<
", " <<
v.color <<
"}";
84template<
typename T0,
typename T1>
85inline std::string
vdiff(
const T0 &v0,
const T1 &v1);
87template<
typename T0,
typename T1>
88inline std::string
vdiff(
const T0 &v0,
const T1 &v1) {
91 const auto b0 = cbegin(v0), e0 = cend(v0);
92 const auto e1 = cend(v1);
95 while(p0 != e0 && *p0 == *p1) { ++p0; ++p1; }
96 if(p0 == e0 && p1 == e1)
98 const auto i = p0 - b0;
100 const auto fmt = [&
s, i](
const char *n,
auto p,
const auto e) {
101 s <<
"\n" << n <<
"[" << i <<
":]:";
std::string vdiff(const T0 &v0, const T1 &v1)
Definition: debug.h:88
function fmt(name, size, n, max)
std::ostream & operator<<(std::ostream &os, const vec< V, T, N > &v)
Definition: debug.h:59
v[1]
Definition: math.lua:19
Definition: graphics.h:97
std::chrono::seconds s
Definition: timing.cpp:6