no need to specialize ToString for objects that provide a range interface (works by default)
parent
b00ebebf10
commit
6c3db69741
|
@ -61,13 +61,6 @@ namespace octa {
|
|||
swap_ranges(each(), v.each());
|
||||
}
|
||||
|
||||
String to_string() const {
|
||||
String ret("{");
|
||||
ret += concat(each(), ", ", ToString<T>());
|
||||
ret += "}";
|
||||
return move(ret);
|
||||
}
|
||||
|
||||
T p_buf[(N > 0) ? N : 1];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -331,17 +331,6 @@ namespace octa {
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T> struct ToString<Vector<T>> {
|
||||
typedef const Vector<T> &ArgType;
|
||||
typedef String ResultType;
|
||||
String operator()(ArgType v) {
|
||||
String ret("{");
|
||||
ret += concat(v.each(), ", ", ToString<RemoveCv<RemoveReference<T>>>());
|
||||
ret += "}";
|
||||
return move(ret);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T, typename U> struct ToString<Pair<T, U>> {
|
||||
typedef const Pair<T, U> &ArgType;
|
||||
typedef String ResultType;
|
||||
|
@ -355,14 +344,6 @@ namespace octa {
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T> struct ToString<initializer_list<T>> {
|
||||
typedef initializer_list<T> ArgType;
|
||||
typedef String ResultType;
|
||||
String operator()(ArgType il) {
|
||||
return move(ToString<decltype(each(il))>()(each(il)));
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
String to_string(const T &v) {
|
||||
return move(ToString<RemoveCv<RemoveReference<T>>>()(v));
|
||||
|
|
Loading…
Reference in New Issue