// Implementation
//
+namespace details {
+
template <typename T>
-void printTo(std::ostream& os, const T& val) noexcept {
+auto printToDefault(std::ostream& os, const T& val, int) noexcept -> decltype(os << val) {
try {
- os << val;
+ return os << val;
} catch (...) {
std::cerr << "[VPU] Unknown error while printing\n";
std::abort();
}
}
+template <typename T>
+void printToDefault(std::ostream& os, const T& val, ...) noexcept {
+ try {
+ os << "<value at " << &val << ">";
+ } catch (...) {
+ std::cerr << "[VPU] Unknown error while printing\n";
+ std::abort();
+ }
+}
+
+} // namespace details
+
+template <typename T>
+inline void printTo(std::ostream& os, const T& val) noexcept {
+ details::printToDefault(os, val, 0);
+}
+
template <typename T1, typename T2>
void printTo(std::ostream& os, const std::pair<T1, T2>& p) noexcept {
try {