**Describe the bug**
https://clickhouse-test-reports.s3.yandex.net/18723/5f962015caf6e48f3ec5ea115a8f424e88741c8b/fuzzer/report.html#fail1

**How to reproduce**
`SELECT tupleHammingDistance((65537, 256), (1025, NULL))`

{
        const ColumnWithTypeAndName & arg1 = arguments[0];
        const ColumnWithTypeAndName & arg2 = arguments[1];
        const DataTypeTuple & type1 = static_cast<const DataTypeTuple &>(*arg1.type);
        const DataTypeTuple & type2 = static_cast<const DataTypeTuple &>(*arg2.type);
        const auto & left_elems = type1.getElements();
        const auto & right_elems = type2.getElements();
        if (left_elems.size() != 2 || right_elems.size() != 2)
            throw Exception(
                "Illegal column of arguments of function " + getName() + ", tuple should have exactly two elements.",
                ErrorCodes::ILLEGAL_COLUMN);
        ColumnPtr result_column;
        bool valid = castBothTypes(left_elems[0].get(), right_elems[0].get(), [&](const auto & left, const auto & right)
        {
            using LeftDataType = std::decay_t<decltype(left)>;
            using RightDataType = std::decay_t<decltype(right)>;
            using T0 = typename LeftDataType::FieldType;
            using T1 = typename RightDataType::FieldType;
            using ColVecT0 = ColumnVector<T0>;
            using ColVecT1 = ColumnVector<T1>;
            using ColVecResult = ColumnVector<ResultType>;