10 #if !defined(CNL_IMPL_OPERATORS_GENERIC_OPERATORS_H)
11 #define CNL_IMPL_OPERATORS_GENERIC_OPERATORS_H
13 #include "../../arithmetic.h"
14 #include "../config.h"
18 #include <type_traits>
30 inline constexpr
auto wants_generic_ops =
false;
39 template<arithmetic Rep, tag Tag = _impl::native_tag>
44 inline constexpr
bool is_operand_specialization =
false;
46 template<arithmetic Rep,
typename Tag>
47 inline constexpr
bool is_operand_specialization<op_value<Rep, Tag>> =
true;
50 concept operand_specialization = is_operand_specialization<T>;
58 template<_impl::op Operator, _impl::operand_specialization... Operands>
61 template<
class ArchetypeTag,
typename Initializer>
64 template<_impl::compound_assign_op Operator,
class LhsOperand, tag LhsTag,
class RhsOperand, tag RhsTag>
69 constexpr
auto& operator()(LhsOperand& lhs, RhsOperand
const& rhs)
const
73 using compound_assign_operator_result = decltype(compound_assign_operator{}(lhs, rhs));
78 return lhs = convert_operator{}(compound_assign_operator{}(lhs, rhs));
83 #endif // CNL_IMPL_OPERATORS_GENERIC_OPERATORS_H