**Describe the issue**
On empty strings, the behaviour of the function `CAST('', 'IPv6')` changed between the versions 21.x and 22.x

**How to reproduce**
On 21.8.14.5:
```
SELECT CAST('', 'IPv6');
Returns: 
	
::
```

On 22.2.2.1:
```
SELECT CAST('', 'IPv6');
Triggers error: 

Code: 441. DB::Exception: Invalid IPv6 value.: While processing CAST('', 'IPv6'). (CANNOT_PARSE_DOMAIN_VALUE_FROM_STRING) (version 22.2.2.1)

```

**Additional context**
This can prevent some users from upgrading to 22.x when the use of this function is spread across a number of table definitions and environments. The following workaround `CAST(toFixedString('', 16), 'IPv6')` works but the manual task of updating all the occurrences is challenging.

bool useDefaultImplementationForNothing() const override { return false; }
    bool useDefaultImplementationForLowCardinalityColumns() const override { return false; }
private:
    std::optional<Diagnostic> diagnostic;
    bool keep_nullable;
    bool cast_ipv4_ipv6_default_on_conversion_error;
};
struct CastOverloadName
{
    static constexpr auto cast_name = "CAST";
    static constexpr auto accurate_cast_name = "accurateCast";
    static constexpr auto accurate_cast_or_null_name = "accurateCastOrNull";
};
struct CastInternalOverloadName
{
    static constexpr auto cast_name = "_CAST";
    static constexpr auto accurate_cast_name = "accurate_Cast";
    static constexpr auto accurate_cast_or_null_name = "accurate_CastOrNull";
};
template <CastType cast_type>
using CastOverloadResolver = CastOverloadResolverImpl<cast_type, false, CastOverloadName, CastName>;
template <CastType cast_type>
using CastInternalOverloadResolver = CastOverloadResolverImpl<cast_type, true, CastInternalOverloadName, CastInternalName>;
}