YSTest: operators.hpp 文件参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 文件列表
- 文件成员

类 | 命名空间 | 宏定义 | 类型定义
operators.hpp 文件参考
YBaseLib » YStandardExtend

重载操作符。 更多...

`#include "addressof.hpp"`
`#include "integer_sequence.hpp"`
operators.hpp 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

## 类

struct | ystdex::details::op_idt< _type >
struct | ystdex::details::ebases< _types >
struct | ystdex::details::bin_ops< _vN, _type, _type2, _tOpt >
struct | ystdex::details::ops_seq< class, typename, class, class >
struct | ystdex::details::ops_seq< _type, _type2, _tOpt, index_sequence< _vSeq... > >
struct | ystdex::details::bin_ops< 0, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 0, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 1, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 1, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 2, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 2, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 3, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 3, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 4, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 4, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 5, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 5, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 6, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 6, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 7, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 7, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 8, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 8, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 9, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 9, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 10, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 10, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 11, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 11, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 12, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 12, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 13, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 13, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< 14, _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< 14, _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 2), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 2), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 3), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(0 , 3), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 4), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 4), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 5), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(1 , 5), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 2), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 2), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 3), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(2 , 3), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 4), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 4), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 5), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(3 , 5), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 4), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 4), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 5), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(4 , 5), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 2), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 2), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 3), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(5 , 3), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 2), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 2), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 3), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(6 , 3), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 2), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 2), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 3), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(7 , 3), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(8 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(8 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(8 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(8 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(9 , 0), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(9 , 0), _type, _type2, dep_ops::use_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(9 , 1), _type, _type2, dep_ops::no_constfn >
struct | ystdex::details::bin_ops< ops_bin_id(9 , 1), _type, _type2, dep_ops::use_constfn >
struct | ystdex::dep_ops::incrementable< _type, _tOpt >
struct | ystdex::dep_ops::decrementable< _type, _tOpt >
struct | ystdex::dep_ops::dereferenceable< _type, _type2, _tOpt >
struct | ystdex::dep_ops::indexable< _type, _type2, _type3, _tOpt >

## 命名空间

| ystdex
| <functional> 特性测试宏。
| ystdex::dep_ops
| 依赖名称查找操作：作为 ADL 的边界。
| ystdex::details

## 宏定义

#define | YB_Impl_Operators_DeOpt class _tOpt = yimpl(use_constfn)
#define | YB_Impl_Operators_H_n(_args) template<class _type, _args>
#define | YB_Impl_Operators_H1 YB_Impl_Operators_H_n(YB_Impl_Operators_DeOpt)
#define | YB_Impl_Operators_H2 YB_Impl_Operators_H_n(typename _type2 YPP_Comma YB_Impl_Operators_DeOpt)
#define | YB_Impl_Operators_H2_de
#define | YB_Impl_Operators_H2_Alias(_name, ...)
#define | YB_Impl_Operators_H2_Alias_de(_name, ...)
#define | YB_Impl_Operators_H3
#define | YB_Impl_Operators_f(_c, _op, _tRet, _expr, ...)
#define | YB_Impl_Operators_bin_ts(_n, _f, _c, _opt, ...)
#define | YB_Impl_Operators_bin_spec(_n, _f, ...)
#define | YB_Impl_Operators_cmpf(_c, _op, _expr, _ptp, _ptp2)

## 类型定义

using | ystdex::dep_ops::no_constfn = false_
using | ystdex::dep_ops::use_constfn = true_
template<typename _type = void>
using | ystdex::details::op_idt_t = _t< op_idt< _type >>
#define | YB_Impl_Operators_cmp(_n, _op, _expr, _ptp, _ptp2)
#define | YB_Impl_Operators_bin_tmpl(_id, _off, _op, ...)
#define | YB_Impl_Operators_bin(_id, _op)
#define | YB_Impl_Operators_con(_id, _op)
#define | YB_Impl_Operators_left(_id, _op)
template<size_t _vID, size_t... _vSeq>
using | ystdex::details::ops_bin_id_seq = index_sequence< ops_bin_id(_vID, _vSeq)... >
template<class _type , typename _type2 , class _tOpt , template< typename... > class... _gOps>
using | ystdex::details::flat_ops = vseq::defer_t< ebases, vseq::fold_t< vseq::_a< vseq::concat_t >, empty_base<>, empty_base< vseq::defer_t< empty_base, _gOps< _type, _type2, _tOpt >>... >>>
size_t | ystdex::details::ops_bin_id (size_t id, size_t off)
#define | YB_Impl_Operators_Compare(_name, _bseq, _bseq_s)
#define | YB_Impl_Operators_Binary_Tmpl(_id, _name, _bseq)
#define | YB_Impl_Operators_Binary(_id, _name) YB_Impl_Operators_Binary_Tmpl(_id, _name, 0 YPP_Comma 1)
#define | YB_Impl_Operators_Commutative(_id, _name)
#define | YB_Impl_Operators_Left(_id, _name)
#define | YB_Impl_Operators_FlatAlias2_de(_name, ...)
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::less_than_comparable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, index_sequence< 2, 4, 1 >, index_sequence< 0, 1, 2, 3, 4, 5 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::equality_comparable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, index_sequence< 7 >, index_sequence< 6, 7, 8 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::equivalent = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, index_sequence< 10 >, index_sequence< 9 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::partially_ordered = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, index_sequence< 2, 11, 14 >, index_sequence< 11, 12, 2, 3, 13, 14 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::addable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, details::ops_bin_id_seq< 0, 0, 1 >, details::ops_bin_id_seq< 0, 0, 1, 2, 3 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::subtractable = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 1, 0, 1 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::subtractable_left = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 1, 4, 5 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::multipliable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, details::ops_bin_id_seq< 2, 0, 1 >, details::ops_bin_id_seq< 2, 0, 1, 2, 3 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::dividable = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 3, 0, 1 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::dividable_left = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 3, 4, 5 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::modable = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 4, 0, 1 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::modable_left = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 4, 4, 5 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::left_shiftable = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 5, 0, 1 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::right_shiftable = _t< details::ops_seq< _type, _type2, _tOpt, details::ops_bin_id_seq< 6, 0, 1 >>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::xorable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, details::ops_bin_id_seq< 7, 0, 1 >, details::ops_bin_id_seq< 7, 0, 1, 2, 3 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::andable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, details::ops_bin_id_seq< 8, 0, 1 >, details::ops_bin_id_seq< 8, 0, 1, 2, 3 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::orable = _t< details::ops_seq< _type, _type2, _tOpt, cond_t< is_same< _type, _type2 >, details::ops_bin_id_seq< 9, 0, 1 >, details::ops_bin_id_seq< 9, 0, 1, 2, 3 >>>>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::totally_ordered = details::flat_ops< _type, _type2, _tOpt, less_than_comparable, equality_comparable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::additive = details::flat_ops< _type, _type2, _tOpt, addable, subtractable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::multiplicative = details::flat_ops< _type, _type2, _tOpt, multipliable, dividable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::integer_multiplicative = details::flat_ops< _type, _type2, _tOpt, multiplicative, modable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::arithmetic = details::flat_ops< _type, _type2, _tOpt, additive, multiplicative >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::integer_arithmetic = details::flat_ops< _type, _type2, _tOpt, additive, integer_multiplicative >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::bitwise = details::flat_ops< _type, _type2, _tOpt, xorable, andable, orable >
template<class _type , class _tOpt = use_constfn>
using | ystdex::dep_ops::unit_steppable = details::ebases< incrementable< _type >, decrementable< _type >>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::shiftable = details::flat_ops< _type, _type2, _tOpt, left_shiftable, right_shiftable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::ring_operators = details::flat_ops< _type, _type2, _tOpt, additive, subtractable_left, multipliable >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::ordered_ring_operators = details::flat_ops< _type, _type2, _tOpt, ring_operators, totally_ordered >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::field_operators = details::flat_ops< _type, _type2, _tOpt, ring_operators, dividable, dividable_left >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::ordered_field_operators = details::flat_ops< _type, _type2, _tOpt, field_operators, totally_ordered >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::euclidean_ring_operators = details::flat_ops< _type, _type2, _tOpt, ring_operators, dividable, dividable_left, modable, modable_left >
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::ordered_euclidean_ring_operators = details::flat_ops< _type, _type2, _tOpt, totally_ordered, euclidean_ring_operators >
template<class _type , typename _type2 , class _tOpt = use_constfn>
using | ystdex::dep_ops::input_iteratable = details::ebases< equality_comparable< _type, _type, _tOpt >, incrementable< _type >, dereferenceable< _type, _type2, _tOpt >>
template<class _type , typename _type2 , class _tOpt = use_constfn>
using | ystdex::dep_ops::output_iteratable = details::ebases< incrementable< _type >>
template<class _type , typename _type2 , class _tOpt = use_constfn>
using | ystdex::dep_ops::forward_iteratable = details::ebases< input_iteratable< _type, _type2, _tOpt >>
template<class _type , typename _type2 , class _tOpt = use_constfn>
using | ystdex::dep_ops::bidirectional_iteratable = details::ebases< forward_iteratable< _type, _type2, _tOpt >, decrementable< _type >>
template<class _type , typename _type2 , typename _type3 , class _tOpt = use_constfn>
using | ystdex::dep_ops::random_access_iteratable = details::ebases< bidirectional_iteratable< _type, _type3, _tOpt >, less_than_comparable< _type, _type, _tOpt >, additive< _type, _type2, _tOpt >, indexable< _type, _type2, _type, _tOpt >>
template<class _type , typename _type2 = _type, class _tOpt = use_constfn>
using | ystdex::dep_ops::operators = details::flat_ops< _type, _type2, _tOpt, totally_ordered, integer_arithmetic, bitwise >

## 详细描述

重载操作符。

版本
  r2827

作者
  FrankHB frank.nosp@m.hb19.nosp@m.89@gm.nosp@m.ail..nosp@m.com

自从
  build 260

创建时间:
  2011-11-13 14:58:05 +0800

修改时间:
  2016-09-21 15:42 +0800

文本编码:
  UTF-8

模块名称:
  YStandardEx::Operators

参见
  http://www.boost.org/doc/libs/1_60_0/boost/operators.hpp 。
  https://github.com/taocpp/operators 。

用法同 Boost.Operators ，但不公开带数字后缀的接口。

在文件 operators.hpp 中定义.

## 宏定义说明

#define YB_Impl_Operators_bin | ( |  | _id,
|  |  | _op
| ) |  |

值:
YB_Impl_Operators_bin_tmpl(_id, 0, _op, x _op##= y, _type x, \
const _type2& y) \
YB_Impl_Operators_bin_tmpl(_id, 1, _op, x _op##= std::move(y), _type x, \
_type2&& y)
YSLib::UI::y
SPos SPos y
Definition: YWidget.cpp:44
YSLib::Drawing::TextState::x
const TextState &ts const TextState &ts const TextState &ts TextState SPos x
Definition: TextBase.h:190
YB_Impl_Operators_bin_tmpl
#define YB_Impl_Operators_bin_tmpl(_id, _off, _op,...)
Definition: operators.hpp:188

在文件 operators.hpp 第 191 行定义.

#define YB_Impl_Operators_bin_spec | ( |  | _n,
|  |  | _f,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_bin_ts(_n, _f, inline, no_constfn, __VA_ARGS__) \
YB_Impl_Operators_bin_ts(_n, _f, yconstfn, use_constfn, __VA_ARGS__)
yconstfn
#define yconstfn
指定编译时常量函数。
Definition: ydef.h:680
ystdex::dep_ops::use_constfn
true_ use_constfn
Definition: operators.hpp:54
YB_Impl_Operators_bin_ts
#define YB_Impl_Operators_bin_ts(_n, _f, _c, _opt,...)
Definition: operators.hpp:131
ystdex::dep_ops::no_constfn
false_ no_constfn
Definition: operators.hpp:52

在文件 operators.hpp 第 139 行定义.

#define YB_Impl_Operators_bin_tmpl | ( |  | _id,
|  |  | _off,
|  |  | _op,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_bin_spec(ops_bin_id(_id YPP_Comma _off), \
YB_Impl_Operators_f, _op, _type, __VA_ARGS__)
YB_Impl_Operators_f
#define YB_Impl_Operators_f(_c, _op, _tRet, _expr,...)
Definition: operators.hpp:117
YB_Impl_Operators_bin_spec
#define YB_Impl_Operators_bin_spec(_n, _f,...)
Definition: operators.hpp:139
YPP_Comma
#define YPP_Comma
替换为逗号的预处理记号。
Definition: ydef.h:225
ystdex::details::ops_bin_id
size_t ops_bin_id(size_t id, size_t off)
Definition: operators.hpp:180

在文件 operators.hpp 第 188 行定义.

#define YB_Impl_Operators_bin_ts | ( |  | _n,
|  |  | _f,
|  |  | _c,
|  |  | _opt,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_H_n(typename _type2) \
struct bin_ops<_n, _type, _type2, dep_ops::_opt> \
{ \
template<yimpl(typename = void)> \
_f(_c, __VA_ARGS__) \
};
YB_Impl_Operators_H_n
#define YB_Impl_Operators_H_n(_args)
Definition: operators.hpp:59

在文件 operators.hpp 第 131 行定义.

#define YB_Impl_Operators_Binary | ( |  | _id,
|  |  | _name
| ) |  | YB_Impl_Operators_Binary_Tmpl(_id, _name, 0 YPP_Comma 1)

在文件 operators.hpp 第 258 行定义.

#define YB_Impl_Operators_Binary_Tmpl | ( |  | _id,
|  |  | _name,
|  |  | _bseq
| ) |  |

值:
YB_Impl_Operators_H2_Alias_de(_name, _t<details::ops_seq<_type, _type2, \
_tOpt, details::ops_bin_id_seq<_id, _bseq>>>)
YB_Impl_Operators_H2_Alias_de
#define YB_Impl_Operators_H2_Alias_de(_name,...)
Definition: operators.hpp:70
ystdex::_t
typename _type::type _t
嵌套类型别名。
Definition: type_traits.hpp:97

在文件 operators.hpp 第 255 行定义.

#define YB_Impl_Operators_cmp | ( |  | _n,
|  |  | _op,
|  |  | _expr,
|  |  | _ptp,
|  |  | _ptp2
| ) |  |

值:
YB_Impl_Operators_bin_spec(_n, YB_Impl_Operators_cmpf, _op, _expr, \
_ptp, _ptp2)
YB_Impl_Operators_bin_spec
#define YB_Impl_Operators_bin_spec(_n, _f,...)
Definition: operators.hpp:139
YB_Impl_Operators_cmpf
#define YB_Impl_Operators_cmpf(_c, _op, _expr, _ptp, _ptp2)
Definition: operators.hpp:150

自从
  build 682

在文件 operators.hpp 第 160 行定义.

#define YB_Impl_Operators_cmpf | ( |  | _c,
|  |  | _op,
|  |  | _expr,
|  |  | _ptp,
|  |  | _ptp2
| ) |  |

值:
YB_Impl_Operators_f(_c, _op, bool, _expr, const _ptp& x, const _ptp2& y) \
YB_Impl_Operators_f(_c, _op, bool, _expr, const op_idt_t<_ptp>& x, \
const _ptp2& y) \
YB_Impl_Operators_f(_c, _op, bool, _expr, const _ptp& x, \
const op_idt_t<_ptp2>& y)
YB_Impl_Operators_f
#define YB_Impl_Operators_f(_c, _op, _tRet, _expr,...)
Definition: operators.hpp:117
YSLib::UI::y
SPos SPos y
Definition: YWidget.cpp:44
YSLib::Drawing::TextState::x
const TextState &ts const TextState &ts const TextState &ts TextState SPos x
Definition: TextBase.h:190

在文件 operators.hpp 第 150 行定义.

#define YB_Impl_Operators_Commutative | ( |  | _id,
|  |  | _name
| ) |  |

值:
YB_Impl_Operators_H2_Alias_de(_name, _t< \
details::ops_seq<_type, _type2, _tOpt, cond_t<is_same<_type, _type2>, \
details::ops_bin_id_seq<_id, 0 YPP_Comma 1>, \
details::ops_bin_id_seq<_id, 0 YPP_Comma 1 YPP_Comma 2 YPP_Comma 3>>>>)
ystdex::cond_t
conditional_t< _tCond::value, _tThen, _tElse > cond_t
条件判断。
Definition: type_traits.hpp:738
YB_Impl_Operators_H2_Alias_de
#define YB_Impl_Operators_H2_Alias_de(_name,...)
Definition: operators.hpp:70
ystdex::_t
typename _type::type _t
嵌套类型别名。
Definition: type_traits.hpp:97

在文件 operators.hpp 第 260 行定义.

#define YB_Impl_Operators_Compare | ( |  | _name,
|  |  | _bseq,
|  |  | _bseq_s
| ) |  |

值:
YB_Impl_Operators_H2_Alias_de(_name, _t<details::ops_seq<_type, _type2, \
_tOpt, cond_t<is_same<_type, _type2>, index_sequence<_bseq_s>, \
index_sequence<_bseq>>>>)
ystdex::cond_t
conditional_t< _tCond::value, _tThen, _tElse > cond_t
条件判断。
Definition: type_traits.hpp:738
YB_Impl_Operators_H2_Alias_de
#define YB_Impl_Operators_H2_Alias_de(_name,...)
Definition: operators.hpp:70
ystdex::_t
typename _type::type _t
嵌套类型别名。
Definition: type_traits.hpp:97

自从
  build 682

在文件 operators.hpp 第 233 行定义.

#define YB_Impl_Operators_con | ( |  | _id,
|  |  | _op
| ) |  |

值:
YB_Impl_Operators_bin(_id, _op) \
YB_Impl_Operators_bin_tmpl(_id, 2, _op, y _op##= x, const _type2& x, \
_type y) \
YB_Impl_Operators_bin_tmpl(_id, 3, _op, y _op##= std::move(x), _type2&& x, \
_type y)
YSLib::UI::y
SPos SPos y
Definition: YWidget.cpp:44
YSLib::Drawing::TextState::x
const TextState &ts const TextState &ts const TextState &ts TextState SPos x
Definition: TextBase.h:190
YB_Impl_Operators_bin_tmpl
#define YB_Impl_Operators_bin_tmpl(_id, _off, _op,...)
Definition: operators.hpp:188
YB_Impl_Operators_bin
#define YB_Impl_Operators_bin(_id, _op)
Definition: operators.hpp:191

在文件 operators.hpp 第 196 行定义.

#define YB_Impl_Operators_DeOpt class _tOpt = yimpl(use_constfn)

在文件 operators.hpp 第 58 行定义.

#define YB_Impl_Operators_f | ( |  | _c,
|  |  | _op,
|  |  | _tRet,
|  |  | _expr,
|  |  | ...
| ) |  |

值:
friend _c YB_ATTR(always_inline) _tRet \
operator _op(__VA_ARGS__) ynoexcept(noexcept(_expr)) \
{ \
return (_expr); \
}
YB_ATTR
#define YB_ATTR(...)
GNU 风格属性。
Definition: ydef.h:353
ynoexcept
#define ynoexcept(...)
YSLib 无异常抛出保证：指定特定的异常规范。
Definition: ydef.h:746

在文件 operators.hpp 第 117 行定义.

#define YB_Impl_Operators_FlatAlias2_de | ( |  | _name,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_H2_Alias_de(_name, details::flat_ops<_type, _type2, \
_tOpt, __VA_ARGS__>)
YB_Impl_Operators_H2_Alias_de
#define YB_Impl_Operators_H2_Alias_de(_name,...)
Definition: operators.hpp:70
ystdex::details::flat_ops
vseq::defer_t< ebases, vseq::fold_t< vseq::_a< vseq::concat_t >, empty_base<>, empty_base< vseq::defer_t< empty_base, _gOps< _type, _type2, _tOpt >>... >>> flat_ops
Definition: operators.hpp:222

在文件 operators.hpp 第 362 行定义.

#define YB_Impl_Operators_H1 YB_Impl_Operators_H_n(YB_Impl_Operators_DeOpt)

在文件 operators.hpp 第 60 行定义.

#define YB_Impl_Operators_H2 YB_Impl_Operators_H_n(typename _type2 YPP_Comma YB_Impl_Operators_DeOpt)

在文件 operators.hpp 第 62 行定义.

#define YB_Impl_Operators_H2_Alias | ( |  | _name,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_H2 \
yimpl(using) _name = __VA_ARGS__;
yimpl
#define yimpl(...)
实现标签。
Definition: ydef.h:262

在文件 operators.hpp 第 67 行定义.

#define YB_Impl_Operators_H2_Alias_de | ( |  | _name,
|  |  | ...
| ) |  |

值:
YB_Impl_Operators_H2_de \
yimpl(using) _name = __VA_ARGS__;
yimpl
#define yimpl(...)
实现标签。
Definition: ydef.h:262

在文件 operators.hpp 第 70 行定义.

#define YB_Impl_Operators_H2_de

值:
YB_Impl_Operators_H_n(typename _type2 = _type YPP_Comma \
YB_Impl_Operators_DeOpt)
YB_Impl_Operators_DeOpt
#define YB_Impl_Operators_DeOpt
Definition: operators.hpp:58
YB_Impl_Operators_H_n
#define YB_Impl_Operators_H_n(_args)
Definition: operators.hpp:59
YPP_Comma
#define YPP_Comma
替换为逗号的预处理记号。
Definition: ydef.h:225

在文件 operators.hpp 第 64 行定义.

#define YB_Impl_Operators_H3

值:
YB_Impl_Operators_H_n(typename _type2 YPP_Comma typename _type3 \
YPP_Comma YB_Impl_Operators_DeOpt)
YB_Impl_Operators_DeOpt
#define YB_Impl_Operators_DeOpt
Definition: operators.hpp:58
YB_Impl_Operators_H_n
#define YB_Impl_Operators_H_n(_args)
Definition: operators.hpp:59
YPP_Comma
#define YPP_Comma
替换为逗号的预处理记号。
Definition: ydef.h:225

在文件 operators.hpp 第 73 行定义.

#define YB_Impl_Operators_H_n | ( |  | _args | ) | template<class _type, _args>

在文件 operators.hpp 第 59 行定义.

#define YB_Impl_Operators_left | ( |  | _id,
|  |  | _op
| ) |  |

值:
YB_Impl_Operators_bin(_id, _op) \
YB_Impl_Operators_bin_tmpl(_id, 4, _op, _type(x) _op##= y, \
const _type2& x, const _type& y) \
YB_Impl_Operators_bin_tmpl(_id, 5, _op, \
_type(x) _op##= std::move(y), const _type2& x, _type&& y)
YSLib::UI::y
SPos SPos y
Definition: YWidget.cpp:44
YSLib::Drawing::TextState::x
const TextState &ts const TextState &ts const TextState &ts TextState SPos x
Definition: TextBase.h:190
YB_Impl_Operators_bin_tmpl
#define YB_Impl_Operators_bin_tmpl(_id, _off, _op,...)
Definition: operators.hpp:188
YB_Impl_Operators_bin
#define YB_Impl_Operators_bin(_id, _op)
Definition: operators.hpp:191

在文件 operators.hpp 第 202 行定义.

#define YB_Impl_Operators_Left | ( |  | _id,
|  |  | _name
| ) |  |

值:
YB_Impl_Operators_H2_Alias_de(_name, _t<details::ops_seq<_type, _type2, \
_tOpt, details::ops_bin_id_seq<_id, 0 YPP_Comma 1>>>) \
YB_Impl_Operators_H2_Alias_de(_name##_left, _t<details::ops_seq<_type, \
_type2, _tOpt, details::ops_bin_id_seq<_id, 4 YPP_Comma 5>>>)
YB_Impl_Operators_H2_Alias_de
#define YB_Impl_Operators_H2_Alias_de(_name,...)
Definition: operators.hpp:70
ystdex::_t
typename _type::type _t
嵌套类型别名。
Definition: type_traits.hpp:97

在文件 operators.hpp 第 265 行定义.