friend bool operator OP(const XLCellValue& lhs, std::string_view rhs) \
{ \
if (std::holds_alternative<std::string>(lhs.m_value)) \
return FUNCTOR<>{}(std::string_view(std::get<std::string>(lhs.m_value)), rhs); \
return false; \
} \
friend bool operator OP(std::string_view lhs, const XLCellValue& rhs) \
{ \
if (std::holds_alternative<std::string>(rhs.m_value)) \
return FUNCTOR<>{}(lhs, std::string_view(std::get<std::string>(rhs.m_value))); \
return false; \
} \
friend bool operator OP(const XLCellValue& lhs, const char* rhs) { return lhs OP std::string_view(rhs); } \
friend bool operator OP(const char* lhs, const XLCellValue& rhs) { return std::string_view(lhs) OP rhs; } \
friend bool operator OP(const XLCellValue& lhs, const std::string& rhs) { return lhs OP std::string_view(rhs); } \
friend bool operator OP(const std::string& lhs, const XLCellValue& rhs) { return std::string_view(lhs) OP rhs; }