in cpp/src/value.cpp [109:153]
int compare_next(decoder& a, decoder& b) {
// Sort by type_id first.
type_id ta = a.next_type(), tb = b.next_type();
int cmp = compare(ta, tb);
if (cmp) return cmp;
switch (ta) {
case NULL_TYPE: return 0;
case ARRAY:
case LIST:
case MAP:
case DESCRIBED:
return compare_container(a, b);
case BOOLEAN: return compare_simple<bool>(a, b);
case UBYTE: return compare_simple<uint8_t>(a, b);
case BYTE: return compare_simple<int8_t>(a, b);
case USHORT: return compare_simple<uint16_t>(a, b);
case SHORT: return compare_simple<int16_t>(a, b);
case UINT: return compare_simple<uint32_t>(a, b);
case INT: return compare_simple<int32_t>(a, b);
case ULONG: return compare_simple<uint64_t>(a, b);
case LONG: return compare_simple<int64_t>(a, b);
case CHAR: return compare_simple<wchar_t>(a, b);
case TIMESTAMP: return compare_simple<timestamp>(a, b);
case FLOAT: return compare_simple<float>(a, b);
case DOUBLE: return compare_simple<double>(a, b);
case DECIMAL32: return compare_simple<decimal32>(a, b);
case DECIMAL64: return compare_simple<decimal64>(a, b);
case DECIMAL128: return compare_simple<decimal128>(a, b);
case UUID: return compare_simple<uuid>(a, b);
case BINARY: return compare_simple<binary>(a, b);
case STRING: return compare_simple<std::string>(a, b);
case SYMBOL: return compare_simple<symbol>(a, b);
}
// Avoid unreached diagnostic from clang
#if defined(__clang__)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunreachable-code"
#endif
// Invalid but equal type_id, treat as equal.
return 0;
#if defined(__clang__)
#pragma GCC diagnostic pop
#endif
}