/// Returns a descriptive error message. fmt="%s stream %s: @%u: expected %u, available %u"; void stream_bounds_exception::info (string& msgbuf, const char* fmt) const throw() { char typeName [256]; strncpy (typeName, m_TypeName, VectorSize(typeName)); typeName[VectorSize(typeName)-1] = 0; if (!fmt) fmt = "%s stream %s: @0x%X: need %u bytes, have %u"; #if PLATFORM_ANDROID msgbuf.format (fmt, demangle_type_name (VectorBlock(typeName)), m_Operation, m_Offset, m_Expected, m_Remaining); #else /* !PLATFORM_ANDROID */ try { msgbuf.format (fmt, demangle_type_name (VectorBlock(typeName)), m_Operation, m_Offset, m_Expected, m_Remaining); } catch (...) {} #endif }
static inline std::string type_name(void) noexcept { return demangle_type_name(typeid(T).name()); }