#pragma once #include namespace std { template inline ostream& operator<<(ostream& o, const saw::schema::UnitElement&){ o< struct unit_print { static_assert(always_false, "Template type not supported"); }; template struct unit_print, schema::UnitElement...> { static std::ostream& print(std::ostream& o){ schema::UnitElement element; std::ostream& o_ret = o << element; if constexpr (sizeof...(UTL) > 0) { std::ostream& o_ret_next = o_ret << ' ' << '*' << ' '; return unit_print...>::print(o_ret_next); } return o_ret<<']'; } }; } } namespace std { template inline ostream& operator<<(ostream& o, const saw::data, Encode>& unit); template inline ostream& operator<<(ostream& o, const saw::data...>, Encode>& unit){ o << unit.handle().get(); if constexpr (sizeof...(UnitT) > 0) { auto& o_ret = o << ' '<<'['; return saw::impl::unit_print...>::print(o_ret); } return o; } }