```
SET compile_expressions = 1
SELECT GREATEST(2,0)
```

{
        c = Op::apply(a);
    }
};
template <typename Op>
struct FixedStringUnaryOperationImpl
{
    static void NO_INLINE vector(const ColumnFixedString::Chars & a, ColumnFixedString::Chars & c)
    {
        size_t size = a.size();
        for (size_t i = 0; i < size; ++i)
            c[i] = Op::apply(a[i]);
    }
};
template <typename FunctionName>
struct FunctionUnaryArithmeticMonotonicity;
template <typename> struct AbsImpl;
template <typename> struct NegateImpl;
struct InvalidType;
template <template <typename> class Op, typename Name, bool is_injective>
class FunctionUnaryArithmetic : public IFunction
{
    static constexpr bool allow_decimal = std::is_same_v<Op<Int8>, NegateImpl<Int8>> || std::is_same_v<Op<Int8>, AbsImpl<Int8>>;
    static constexpr bool allow_fixed_string = Op<UInt8>::allow_fixed_string;
    template <typename F>
    static bool castType(const IDataType * type, F && f)