7 #if !defined(CNL_IMPL_OPERATORS_NATIVE_TAG_H) 
    8 #define CNL_IMPL_OPERATORS_NATIVE_TAG_H 
   10 #include "../../constant.h" 
   11 #include "../numbers/set_signedness.h" 
   12 #include "definition.h" 
   13 #include "homogeneous_deduction_tag_base.h" 
   14 #include "homogeneous_operator_tag_base.h" 
   18 #include <type_traits> 
   25             : homogeneous_deduction_tag_base
 
   26             , homogeneous_operator_tag_base {
 
   27             using identity = native_tag;
 
   32         struct has_native_operators
 
   34                       bool, is_constant<T>::value || std::is_integral_v<T> || std::is_floating_point<T>::value> {
 
   39     inline constexpr 
auto is_tag<_impl::native_tag> = 
true;
 
   41     template<
typename Source, 
typename Destination>
 
   42     struct custom_operator<_impl::convert_op, op_value<Source>, op_value<Destination>> {
 
   43         [[nodiscard]] constexpr 
auto operator()(Source 
const& from) 
const -> Destination
 
   45             return _impl::convert_op{}.template operator()<Destination>(from);
 
   49     template<_impl::unary_arithmetic_op Operator, 
typename Rhs>
 
   50     requires(_impl::has_native_operators<Rhs>::value) 
struct custom_operator<Operator, op_value<Rhs>> : Operator {
 
   53     template<_impl::binary_op Operator, 
typename Lhs, 
typename Rhs>
 
   54     requires(_impl::has_native_operators<Lhs>::value&& _impl::has_native_operators<Rhs>::value) 
struct custom_operator<Operator, op_value<Lhs>, op_value<Rhs>> : Operator {
 
   58 #endif  // CNL_IMPL_OPERATORS_NATIVE_TAG_H