|
@@ -461,13 +461,15 @@ template <typename Array, typename Other, \
|
|
|
typename OtherElement = simple::support::AOps_Details::array_element_t<OtherOperatorDef, Other>, \
|
|
|
typename OtherElOpDef = simple::support::define_array_operators<OtherElement>, \
|
|
|
bool ops_defined = OperatorDef::enabled_right_element_operators && simple::support::array_operator::op_type, \
|
|
|
+ std::enable_if_t<ops_defined>* = nullptr, \
|
|
|
+ std::enable_if_t<std::is_invocable_v<op_fun, Element, Other>>* = nullptr, \
|
|
|
typename Result = typename OperatorDef::template result<std::conditional_t<ops_defined, std::invoke_result_t<op_fun,Element,Other>, Element>, simple::support::array_operator::op_type, Other, true>, \
|
|
|
typename ResultOpDef = simple::support::define_array_operators<Result>, \
|
|
|
- std::enable_if_t<(ops_defined) \
|
|
|
- && !std::is_same_v< \
|
|
|
+ std::enable_if_t< \
|
|
|
+ not std::is_same_v< \
|
|
|
typename OperatorDef::compatibility_tag, \
|
|
|
typename OtherOperatorDef::compatibility_tag> \
|
|
|
- && !std::is_same_v< \
|
|
|
+ && not std::is_same_v< \
|
|
|
typename OperatorDef::compatibility_tag, \
|
|
|
typename OtherElOpDef::compatibility_tag> \
|
|
|
&& (std::is_same_v< \
|
|
@@ -476,7 +478,6 @@ template <typename Array, typename Other, \
|
|
|
|| std::is_same_v< \
|
|
|
typename ResultOpDef::compatibility_tag, \
|
|
|
typename OperatorDef::compatibility_tag>) \
|
|
|
- && std::is_invocable_v<op_fun, Element, Other>\
|
|
|
>* = nullptr \
|
|
|
> \
|
|
|
[[nodiscard]] constexpr auto operator op_symbol \
|
|
@@ -502,10 +503,12 @@ template <typename Array, typename Other, \
|
|
|
typename OtherElement = simple::support::AOps_Details::array_element_t<OtherOperatorDef, Other>, \
|
|
|
typename OtherElOpDef = simple::support::define_array_operators<OtherElement>, \
|
|
|
bool ops_defined = OperatorDef::enabled_left_element_operators && simple::support::array_operator::op_type, \
|
|
|
+ std::enable_if_t<ops_defined>* = nullptr, \
|
|
|
+ std::enable_if_t<std::is_invocable_v<op_fun, Other, Element>>* = nullptr, \
|
|
|
typename Result = typename OperatorDef::template result<std::conditional_t<ops_defined, std::invoke_result_t<op_fun,Other,Element>, Element>, simple::support::array_operator::op_type, Other, true>, \
|
|
|
typename ResultOpDef = simple::support::define_array_operators<Result>, \
|
|
|
- std::enable_if_t<(ops_defined) \
|
|
|
- && !std::is_same_v< \
|
|
|
+ std::enable_if_t< \
|
|
|
+ !std::is_same_v< \
|
|
|
typename OperatorDef::compatibility_tag, \
|
|
|
typename OtherOperatorDef::compatibility_tag> \
|
|
|
&& !std::is_same_v< \
|
|
@@ -517,7 +520,6 @@ template <typename Array, typename Other, \
|
|
|
|| std::is_same_v< \
|
|
|
typename ResultOpDef::compatibility_tag, \
|
|
|
typename OperatorDef::compatibility_tag>) \
|
|
|
- && std::is_invocable_v<op_fun, Other, Element>\
|
|
|
>* = nullptr \
|
|
|
> \
|
|
|
[[nodiscard]] constexpr auto operator op_symbol \
|