YSTest: ystdex 命名空间参考

YSTest PreAlpha_b900_20201012 The YSLib Test Project

命名空间 | 类 | 类型定义 | 枚举 | 函数 | 变量
ystdex 命名空间参考

`<memory>` 特性测试宏。 更多...

## 命名空间

| any_ops
| bases
| 隔离 ADL 的基类命名空间。
| cpp2011
| 包含 ISO C++ 2011 引入的名称的命名空间。
| cpp2014
| 使用 new 和指定参数构造指定类型的 std::unique_ptr 对象。
| cpp2017
| 取约束范围的值。
| dep_ops
| 依赖名称查找操作：作为 ADL 的边界。
| details
| examiners
| 操作检测命名空间。
| fseq
| iterator_transformation
| 迭代变换操作。
| nodep
| 隔离 ADL 的基类以外的命名空间。
| pmr
| single_thread
| 单线程操作：保证单线程环境下接口及符合对应的 std 命名空间下的接口。
| threading
| 在单线程环境和多线程环境下都可用的线程同步接口。
| uniformed_tags
| 对非模板和不同模板参数相同的类型标签接口。
| vseq

## 类

struct | addressof_op
| ystdex::addressof 仿函数。 更多...
struct | addressof_op< void >
struct | addrof
| 一元 & 操作。 更多...
struct | addrof< void >
class | allocator_delete
| 释放分配器分配的对象的删除器。 更多...
class | allocator_guard_delete
| 释放分配器分配的存储资源的删除器。 更多...
class | allocator_mismatch_error
| 不满足分配器兼容性要求导致的异常。 更多...
struct | allocator_traits
struct | always
| 表达式 SFINAE 别名模板。 更多...
struct | and_
| 逻辑操作元函数。 更多...
struct | and_< _b1 >
struct | and_< _b1, _b2, _bn... >
struct | and_<>
class | any
| 基于类型擦除的动态泛型对象。 更多...
class | any_bidirectional_iterator
| 动态泛型双向迭代器。 更多...
struct | any_constructible
| 接受任意参数类型构造的类型。 更多...
class | any_forward_iterator
| 动态泛型前向迭代器。 更多...
class | any_input_iterator
| 动态泛型输入迭代器。 更多...
struct | are_same
| 判断第一参数和之后的参数指定的类型相同。 更多...
class | bad_any_cast
| 动态泛型转换失败异常。 更多...
class | bad_optional_access
| 可选值操作失败异常。 更多...
class | basic_membuf
| 内存中储存不具有所有权的只读流缓冲。 更多...
class | basic_string
class | basic_string_view
class | basic_tstring_view
| 指定结束字符的只读字符串视图。 更多...
class | basic_tstring_view< _tChar, _tTraits, 0 >
struct | bit_and
| 位与仿函数。 更多...
struct | bit_and< void >
struct | bit_not
| 位取反仿函数。 更多...
struct | bit_not< void >
struct | bit_or
| 位或仿函数。 更多...
struct | bit_or< void >
struct | bit_xor
| 位异或仿函数。 更多...
struct | bit_xor< void >
class | bitseg_iterator
| 位段迭代器。 更多...
class | block_buffer
| 块缓冲。 更多...
struct | boxed_value
| 包装类类型的值的对象。 更多...
class | call_once_init
| 使用 call_once 的静态初始化管理器。 更多...
struct | call_projection
| 调用投影：向原调用传递序列指定的位置的参数。 更多...
struct | call_projection< _tRet(_tParams...), index_sequence< _vSeq... > >
struct | call_projection< expanded_function< _tRet(_tParams...), _tBase >, index_sequence< _vSeq... > >
struct | call_projection< function_base< _tTraits, _tRet(_tParams...)>, index_sequence< _vSeq... > >
struct | call_projection< std::function< _tRet(_tParams...)>, index_sequence< _vSeq... > >
struct | call_projection< std::tuple< _tParams... >, index_sequence< _vSeq... > >
struct | class_allocator
| 类分配器。 更多...
struct | combined_hash
| 使用 std::hash 和 ystdex::hash_combine_seq 实现的对特定类型的散列。 更多...
struct | combined_hash< _type >
struct | combined_hash< _type1, _type2, _types... >
struct | combined_hash< std::pair< _type1, _type2 > >
struct | combined_hash< std::tuple< _types... > >
struct | common_int_type
| 公共整数类型。 更多...
struct | common_int_type< _type1, _type2, _types... >
struct | composed
| 复合函数。 更多...
struct | composed_n
| 多元分发的复合函数。 更多...
class | container_inserter
| 容器插入函数对象。 更多...
class | default_init_allocator
| 默认初始化构造分配器。 更多...
struct | default_init_t
| 默认初始化标记。 更多...
struct | default_last_value
| 合并值序列。 更多...
struct | default_last_value< void >
struct | delta_assignment
| 选择加法/减法复合赋值运算仿函数。 更多...
struct | delta_assignment< false, _tScalar1, _tScalar2 >
struct | divides
| 除法仿函数。 更多...
struct | divides< void >
struct | empty_base
| 空基类模板。 更多...
class | enum_union
struct | equal_to
| 等于关系仿函数。 更多...
struct | equal_to< void >
struct | expand_proxy
struct | expand_proxy< _fCallable, 0 >
struct | expanded_caller
| 接受冗余参数的可调用对象。 更多...
class | expanded_function
| 扩展函数包装类模板。 更多...
class | expanded_function< _tRet(_tParams...), _tBase >
| 扩展函数包装类模板特化。 更多...
struct | first_of
struct | first_of< void >
class | fixed_point
| 通用定点数。 更多...
struct | free_delete
| 使用显式析构函数调用和 std::free 的删除器。 更多...
struct | free_delete< _type[]>
class | function_base
| 函数包装类模板。 更多...
class | function_base< _tTraits, _tRet(_tParams...)>
| 函数包装类模板特化。 更多...
struct | function_traits
| 函数包装特征。 更多...
struct | function_traits< _tRet(_tParams...), empty_function_policy::no_check >
struct | function_traits< _tRet(_tParams...), empty_function_policy::no_effect >
struct | function_traits< _tRet(_tParams...), empty_function_policy::throwing >
struct | generalized_composed
| 多元复合函数。 更多...
struct | get_equal_to
| get 成员等于仿函数。 更多...
struct | get_equal_to< void >
struct | get_get_t
struct | get_indirect_t
struct | get_less
| get 成员小于仿函数。 更多...
struct | get_less< void >
struct | greater
| 大于关系仿函数。 更多...
struct | greater< _type * >
struct | greater< void >
struct | greater_equal
| 大于等于关系仿函数。 更多...
struct | greater_equal< _type * >
struct | greater_equal< void >
struct | guard
| 作用域守卫：析构时调用保存的函数对象或引用。 更多...
struct | has_equality_operator
| 判断是否存在合式的结果可转换为 bool 类型的 == 操作符接受指定类型的表达式。 更多...
struct | has_get_allocator
| 判断类型具有返回分配器的无异常抛出的 get_allocator 成员函数。 更多...
struct | has_iterator_category
| 判断迭代器是否具有相同的指定的类别。 更多...
struct | has_mem_apply
| 判断 _type 是否包含可以指定参数应用得到类型的成员 apply 模板。 更多...
struct | has_mem_delete
struct | has_mem_is_transparent
| 判断 _type 是否包含 is_transparent 成员类型。 更多...
struct | has_mem_new
struct | has_mem_type
| 判断 _type 是否包含 type 类型成员。 更多...
struct | has_mem_value
| 判断 _type 是否包含 value 数据成员。 更多...
struct | has_mem_value_type
| 判断 _type 是否包含 value_type 类型成员。 更多...
struct | has_nested_allocator
| 判断类型具有嵌套的成员 allocator_type 指称一个构造器类型。 更多...
struct | has_no_overloaded_addressof
| 判断是否无法重载 & 操作符接受指定类型的表达式。 更多...
struct | has_nonempty_virtual_base
| 判断指定类型是否有非空虚基类。 更多...
struct | has_overloaded_addressof
| 判断是否存在合式重载 & 操作符接受指定类型的表达式。 更多...
struct | has_subscription
| 判断是否存在合式的结果为非 void 类型的 [] 操作符接受指定类型的表达式。 更多...
struct | have_common_nonempty_virtual_base
| 判断指定的两个类类型是否不同且有公共非空虚基类。 更多...
struct | have_same_iterator_category
| 判断若干个迭代器是否具有相同的指定的类别。 更多...
struct | have_same_modulo
| 判断两个类型是否具有相同的模值。 更多...
struct | id
| 恒等仿函数。 更多...
struct | id< void >
struct | identity
| 恒等元函数。 更多...
class | ifile_iterator
| 基于 ISO C 标准库的流只读迭代器。 更多...
struct | in_place_index_ctor
struct | indirect
| 一元 * 操作。 更多...
struct | indirect< void >
class | indirect_input_iterator
| 间接输入迭代器。 更多...
class | indirect_ref_adaptor
| 包装间接操作的引用适配器。 更多...
struct | integer_sequence
struct | integer_width
| 取指定整数类型的位宽度。 更多...
class | invalid_construction
| 使用不满足构造限制检查导致的异常。 更多...
struct | invoke_result
struct | is_aligned_compatible
| 判断是否对齐兼容。 更多...
struct | is_aligned_placeable
| 判断是否可放置对齐存储。 更多...
struct | is_aligned_replaceable
| 判断是否可替换对齐存储。 更多...
struct | is_aligned_storable
| 判断是否可对齐存储。 更多...
struct | is_allocatable
| 判断类型是否符合分配器要求的目标类型。 更多...
struct | is_allocator
| 判断类型是分配器。 更多...
struct | is_allocator_for
| 判断类型是指定值类型的分配器。 更多...
struct | is_array_of_unknown_bound
| 判断是否为未知大小的数组类型。 更多...
struct | is_byte_allocator
| 判断类型是 byte 分配器。 更多...
struct | is_char_specialized_in_std
| 判断字符类型是否被 ISO C++ 指定提供 `std::char_traits` 的特化。 更多...
struct | is_class_pointer
| 判断指定类型是否是指向类类型的指针。 更多...
struct | is_class_type
| 判断指定类型是否是类类型。 更多...
struct | is_contravariant
| 判断指定类型之间是否逆变。 更多...
struct | is_contravariant< _tResFrom(_tFromParams...), _tResTo(_tToParams...)>
struct | is_contravariant< empty_base< _tFroms... >, empty_base< _tTos... > >
struct | is_contravariant< expanded_function< _tResFrom(_tFromParams...), _tBase >, expanded_function< _tResTo(_tToParams...), _tBase > >
struct | is_contravariant< function_base< _tTraits, _tResFrom(_tFromParams...)>, function_base< _tTraits, _tResTo(_tToParams...)> >
struct | is_contravariant< std::function< _tResFrom(_tFromParams...)>, std::function< _tResTo(_tToParams...)> >
struct | is_contravariant< std::tuple< _tFroms... >, std::tuple< _tTos... > >
struct | is_copyable
struct | is_covariant
| 判断指定类型之间是否协变。 更多...
struct | is_covariant< _tFrom(_tFromParams...), _tTo(_tToParams...)>
struct | is_covariant< empty_base< _tFroms... >, empty_base< _tTos... > >
struct | is_covariant< expanded_function< _tFrom(_tFromParams...), _tBase >, expanded_function< _tTo(_tToParams...), _tBase > >
struct | is_covariant< function_base< _tTraits, _tFrom(_tFromParams...)>, function_base< _tTraits, _tTo(_tToParams...)> >
struct | is_covariant< std::function< _tFrom(_tFromParams...)>, std::function< _tTo(_tToParams...)> >
struct | is_covariant< std::tuple< _tFroms... >, std::tuple< _tTos... > >
struct | is_cv
| 判断指定类型是否为 const 或 volatile 类型。 更多...
struct | is_decayed
| 判断指定类型是否已退化为指定类型。 更多...
struct | is_decomposable
| 判断指定类型是否可分解为一个参数为类型的模板和类型参数。 更多...
struct | is_decomposable< _gOp< _types... > >
struct | is_enum_union
struct | is_enum_union< enum_union< _types... > >
struct | is_equal
| 相等关系仿函数。 更多...
struct | is_explicitly_constructible
| 判断指定类型是否可被指定参数类型构造且要求显式构造。 更多...
struct | is_explicitly_nothrow_constructible
| 判断指定类型是否可被指定参数类型无异常抛出构造且要求显式构造。 更多...
struct | is_function_pointer
| 判断指定类型是否是指向函数类型的指针。 更多...
struct | is_future_type
struct | is_future_type< std::future< _type > >
struct | is_implicitly_constructible
| 判断指定类型是否可被指定参数类型构造且可隐式构造。 更多...
struct | is_implicitly_nothrow_constructible
| 判断指定类型是否可被指定参数类型无异常抛出构造且可隐式构造。 更多...
struct | is_in_types
| 判断第一参数在之后参数指定的类型中出现。 更多...
struct | is_interoperable
| 判断指定类型之间是否相同或可互相转换。 更多...
struct | is_invocable
struct | is_invocable_r
struct | is_lvalue_class_reference
| 判断指定类型是否是类类型左值引用。 更多...
struct | is_moveable
struct | is_nonconst_object
| 判断类型是否为非 const 对象类型。 更多...
struct | is_normalizable
| 判断类型是否可满足正规化要求：在 0 和 1 之间存在值进行表示。 更多...
struct | is_normalizable< fixed_point< _tBase, _vInt, _vFrac > >
| is_normalizable 的 fixed_point 特化类型。 更多...
struct | is_nothrow_copyable
struct | is_nothrow_invocable
struct | is_nothrow_invocable_r
struct | is_nothrow_moveable
struct | is_nothrow_swappable
struct | is_nothrow_swappable_with
| 判断是否可以无抛出地调用 `swap` 。 更多...
struct | is_null_pointer
struct | is_object_or_void
| 判断指定类型是否为对象或 void 类型。 更多...
struct | is_object_pointer
| 判断指定类型是否是指向对象类型的指针。 更多...
struct | is_pointer_to_object
| 判断指定类型是否是指向对象类型的指针。 更多...
struct | is_reference_wrapper
| 判断模板参数指定的类型是否为引用包装的实例。 更多...
struct | is_reference_wrapper< lref< _type > >
struct | is_reference_wrapper< std::reference_wrapper< _type > >
struct | is_referenceable
| 判断指定类型是否为可引用类型。 更多...
struct | is_returnable
| 判断指定类型是否可作为返回类型。 更多...
struct | is_rvalue_class_reference
| 判断指定类型是否是类类型右值引用。 更多...
struct | is_same_or_convertible
| 判断指定类型之间是否相同或可转换。 更多...
struct | is_same_param
| 判断第一参数和第二参数指定的参数类型相同。 更多...
struct | is_sharing
| 判断指定类型是否为已知的持有共享所有权的对象类型。 更多...
struct | is_sharing< std::shared_ptr< _type > >
struct | is_sharing< std::weak_ptr< _type > >
struct | is_std_reference_wrapper
| 判断模板参数指定的类型是否为标注库引用包装的实例。 更多...
struct | is_std_reference_wrapper< std::reference_wrapper< _type > >
struct | is_string_class
| 判断指定类型是否为字符串类类型。 更多...
struct | is_string_like
| 判断指定类型是否为类字符串类型。 更多...
struct | is_swappable
struct | is_swappable_with
| 判断是否可以调用 `swap` 。 更多...
struct | is_throwing_move_copyable
| 判断指定类型是否为可复制构造但不可无抛出异常地转移构造的类型。 更多...
struct | is_trivial_class
| 判断指定类型是否是平凡的非联合类类型。 更多...
struct | is_trivial_class_type
struct | is_trivial_union
| 判断指定类型是否是平凡的联合类型。 更多...
struct | is_trivially_copyable
struct | is_trivially_moveable
struct | is_trivially_replaceable
| 判断是否可平凡替换存储。 更多...
struct | is_unqualified
| 判断指定类型是否为无限定的指定类型。 更多...
struct | is_unqualified_object
| 判断类型是否为非 const 对象类型。 更多...
struct | less
| 小于关系仿函数。 更多...
struct | less< _type * >
struct | less< void >
struct | less_equal
| 小于等于关系仿函数。 更多...
struct | less_equal< _type * >
struct | less_equal< void >
class | list
| 列表容器。 更多...
struct | logical_and
| 逻辑与仿函数。 更多...
struct | logical_and< void >
struct | logical_not
| 逻辑非仿函数。 更多...
struct | logical_not< void >
struct | logical_or
| 逻辑或仿函数。 更多...
struct | logical_or< void >
class | lref
| 左值引用包装。 更多...
struct | make_function_type
| 取指定返回类型和元组指定参数类型的函数类型。 更多...
struct | make_function_type< _tRet, empty_base< _tParams... > >
struct | make_function_type< _tRet, expanded_function< _tUnused(_tParams...), _tBase > >
struct | make_function_type< _tRet, function_base< _tTraits, _tUnused(_tParams...)> >
struct | make_function_type< _tRet, std::tuple< _tParams... > >
struct | make_parameter_list
| 取参数列表。 更多...
struct | make_parameter_list< expanded_function< _fSig, _tBase > >
struct | make_parameter_list< function_base< _tTraits, _fSig > >
struct | make_peano_sequence
| 取皮亚诺公理决定的整数序列。 更多...
struct | make_peano_sequence< _tInt, _vBase, 0 >
struct | make_signed_c
| 取指定整数类型和条件表达式对应的有符号或无符号整数类型。 更多...
struct | make_signed_c< _type, false >
struct | make_successor
| 取整数序列的自然数后继。 更多...
struct | make_successor< _tInt, _vBase, integer_sequence< _tInt, _vSeq... > >
struct | make_widen_int
| 位加倍扩展。 更多...
struct | make_width_int
| 取按指定宽度的整数类型。 更多...
struct | make_width_int< 16U >
struct | make_width_int< 32U >
struct | make_width_int< 64U >
struct | make_width_int< 8U >
class | map
| 映射容器。 更多...
class | mapped_set
| 允许指定不同于值类型的键的集合。 更多...
struct | mapped_set_traits
| 映射值集合特征。 更多...
struct | max_
struct | max_< _v1 >
struct | max_< _v1, _v2, _vn... >
struct | mem_get
| 成员 get 操作。 更多...
struct | mem_get< void >
struct | min_
| 算术操作元函数。 更多...
struct | min_< _v1 >
struct | min_< _v1, _v2, _vn... >
struct | minus
| 减法仿函数。 更多...
struct | minus< void >
class | mixin
| 混入对象。 更多...
struct | modular_arithmetic
| 模算术特性：取得不超过模值的最大值。 更多...
struct | modular_arithmetic< fixed_point< _tBase, _vInt, _vFrac > >
| modular_arithmetic 的 fixed_point 特化类型。 更多...
struct | modulus
| 模运算仿函数。 更多...
struct | modulus< void >
class | multimap
struct | multiplies
| 乘法仿函数。 更多...
struct | multiplies< void >
struct | n_tag
| 自然数标记。 更多...
struct | n_tag< 0 >
struct | nand_
| 逻辑与非。 更多...
class | narrowing_error
| 异常：无法表示数值范围的转换。 更多...
struct | negate
| 取反仿函数。 更多...
struct | negate< void >
struct | nested_allocator
| 取嵌套成员分配器类型，若不存在则使用第二模板参数指定的默认类型。 更多...
struct | nested_allocator_base
| 启用 allocator_type 的基类。 更多...
struct | nested_allocator_base< _tCon, false >
class | nifty_counter
| 使用引用计数的静态初始化管理器。 更多...
struct | nonesuch
| 不接受任意参数类型构造的类型。 更多...
struct | nor_
| 逻辑或非。 更多...
struct | not_
| 逻辑非。 更多...
struct | not_equal_to
| 不等于关系仿函数。 更多...
struct | not_equal_to< void >
class | nptr
| 可空指针包装：满足 `NullablePointer` 要求同时满足转移后为空。 更多...
struct | nullopt_t
| 无值状态指示。 更多...
class | nullptr_t
| 空指针类。 更多...
struct | object_pack
| 打包的对象：使用 pack_object 得到的对象包装。 更多...
class | observer_ptr
| 观察者指针：无所有权的智能指针。 更多...
class | offsetof_check
| 成员偏移计算静态类型检查。 更多...
struct | one_shot
| 调用一次的函数包装模板。 更多...
struct | one_shot< _func, _tRes, void >
struct | one_shot< _func, void, _tState >
struct | one_shot< _func, void, void >
class | optional
| 可选值对象包装。 更多...
struct | optional_last_value
| 合并可选值序列。 更多...
struct | optional_last_value< void >
struct | or_
| 逻辑或。 更多...
struct | or_< _b1 >
struct | or_< _b1, _b2, _bn... >
struct | or_<>
struct | parameter_of
| 取指定索引的参数类型。 更多...
struct | paramlist_size
| 取参数列表大小。 更多...
class | path
| 一般路径模板。 更多...
struct | path_traits
| 路径特征。 更多...
struct | path_traits< basic_string< _tChar, _tTraits, _tAlloc > >
| 文件字符串路径特征。 更多...
struct | path_traits< void >
struct | placement_delete
| 放置存储的对象删除器：释放时调用伪析构函数。 更多...
struct | plus
| 加法仿函数。 更多...
struct | plus< void >
struct | pointer_classify
| 指针包装为类类型迭代器。 更多...
struct | pointer_classify< _type * >
class | pointer_iterator
| 指针迭代器。 更多...
class | prototyped_iterator
| 原型迭代器：共享对象引用，在解引用时进行指定的更新操作的随机访问迭代器。 更多...
class | pseudo_iterator
| 伪迭代器。 更多...
struct | pseudo_output
| 伪输出对象。 更多...
class | pun_ref
| 避免严格别名分析限制的缓冲引用。 更多...
struct | raw_tag
| 直接构造类型（直接构造重载用）。 更多...
class | recent_used_list
| 使用双向链表实现的最近使用列表。 更多...
struct | ref_eq
| 引用等价关系仿函数。 更多...
struct | ref_eq< void >
| ! 更多...
struct | remove_cvref
| 移除可能被 cv-qualifier 修饰的引用类型。 更多...
struct | remove_rp
| 移除指针和引用类型。 更多...
struct | remove_rpcv
| 移除可能被 cv-qualifier 修饰的引用和指针类型。 更多...
struct | return_of
| 取返回类型。 更多...
struct | return_of< expanded_function< _fSig, _tBase > >
struct | return_of< function_base< _tTraits, _fSig > >
class | reverse_iterator
struct | second_of
struct | second_of< void >
struct | standard_layout_storage
| 任意标准布局类型对象提供空间的存储。 更多...
class | state_guard
| 使用临时状态暂存对象的作用域守卫。 更多...
class | state_guard< _type, void, _tToken >
struct | string_traits
| 字符串特征。 更多...
class | subscriptive_iterator
| 成员下标迭代器。 更多...
struct | tagged_value
| 带记号标记的可选值。 更多...
class | task_pool
| 任务池：带有队列大小限制的线程池。 更多...
class | temporary_buffer
| 临时缓冲区。 更多...
struct | temporary_buffer_delete
| 使用显式 ystdex::return_temporary_buffer 调用释放存储的删除器。 更多...
struct | temporary_buffer_delete< _type[]>
class | thread_pool
| 线程池。 更多...
class | thunk
| 包装惰性求值的过程。 更多...
class | transformed_iterator
| 变换迭代器。 更多...
class | transposed_iterator
| 下标转置迭代器适配器。 更多...
struct | tuple_find
| 查找类型对应的索引位置，若不存在则为 tuple_not_found 。 更多...
struct | tuple_find< _type, const _tTuple >
struct | tuple_find< _type, const volatile _tTuple >
struct | tuple_find< _type, std::pair< _type1, _type2 > >
struct | tuple_find< _type, std::tuple< _types... > >
struct | tuple_find< _type, volatile _tTuple >
class | tuple_iterator
| 元组迭代器。 更多...
class | type_id_index
| 类型索引。 更多...
class | type_id_info
| 类型信息。 更多...
class | unimplemented
| 异常：未实现的操作。 更多...
class | unsupported
| 异常：不支持的操作。 更多...
struct | unwrap_ref_decay
struct | unwrap_reference
| 取引用包装的类型或未被包装的模板参数类型。 更多...
struct | unwrap_reference< lref< _type > >
struct | unwrap_reference< std::reference_wrapper< _type > >
class | used_list_cache
| 按最近使用策略刷新的缓存。 更多...
struct | used_list_cache_traits
| 最近刷新策略的缓存特征。 更多...
struct | used_list_cache_traits< _tKey, _tMapped, void, _tAlloc, _tList >
struct | value_init_t
| 值初始化标记。 更多...
struct | variadic_param
| 变长参数操作模板。 更多...
struct | variadic_param< 0U >
class | void_ref
| 任意对象引用类型。 更多...
class | void_ref_any
struct | when
| 类似 void_t 的元函数，具有较低匹配优先级，避免偏特化歧义；但使用条件表达式。 更多...
struct | wrapped_enum_traits
struct | wrapped_enum_traits< enum_union< _types... > >
struct | xcrease_t
| 选择自增/自减运算仿函数。 更多...
struct | xcrease_t< false, _tScalar >

## 类型定义

using | byte = unsigned char
| 字节类型。 更多...
using | octet = void
template<class _tAlloc >
using | alloc_value_t = typename allocator_traits< _tAlloc >::value_type
template<class _tAlloc >
using | alloc_pointer_t = typename allocator_traits< _tAlloc >::pointer
template<class _tAlloc >
using | alloc_const_pointer_t = typename allocator_traits< _tAlloc >::const_pointer
template<class _tAlloc >
using | alloc_size_type_t = typename allocator_traits< _tAlloc >::size_type
template<class _tAlloc >
using | alloc_difference_type_t = typename allocator_traits< _tAlloc >::difference_type
template<class _tAlloc , typename _type >
using | rebind_alloc_t = typename allocator_traits< _tAlloc >::template rebind_alloc< _type >
template<class _tAlloc , typename _type >
using | rebind_traits_t = typename allocator_traits< _tAlloc >::template rebind_traits< _type >
template<class _tAlloc >
using | allocator_guard = std::unique_ptr< alloc_value_t< _tAlloc >, allocator_guard_delete< _tAlloc > >
| 分配器守卫。 更多...
template<typename _type >
using | local_allocator = cond_t< and_< has_mem_new< _type, size_t >, has_mem_delete< _type * > >, class_allocator< _type >, std::allocator< _type > >
| 局部分配器。 更多...
template<typename _tSelected , typename _type = void>
using | exclude_tag_t = enable_if_t< details::decayed_not_tag_t< _tSelected >::value, _type >
| 排除选择类型为标签的重载。 更多...
template<typename... _tParams>
using | exclude_tagged_params_t = enable_if_t< sizeof...(_tParams)==0 ? true :details::decayed_not_tag_t< vseq::front_t< empty_base< _tParams... > >>::value >
| 排除选择类型的第一个参数为标签的重载。 更多...
using | input_monomorphic_iterator = any_input_iterator< void_ref, ptrdiff_t, void *, void_ref_any >
using | forward_monomorphic_iterator = any_forward_iterator< void_ref, ptrdiff_t, void *, void_ref >
using | bidirectional_monomorphic_iterator = any_bidirectional_iterator< void_ref, ptrdiff_t, void *, void_ref >
template<typename _type = void, typename... _tParams>
using | common_array_t = std::array< common_nonvoid_t< _type, decay_t< _tParams >... >, sizeof...(_tParams)>
| 取指定类型和参数类型推断的 std::array 实例。 更多...
using | noncopyable = bases::noncopyable
using | nonmovable = bases::nonmovable
using | cloneable = bases::cloneable
template<typename _type >
using | deref_self = bases::deref_self< _type >
template<class _tBase , typename... _tParams>
using | derived_entity = bases::derived_entity< _tBase, _tParams... >
template<size_t... _vSize>
using | bitseg_traits = nodep::bitseg_traits< _vSize... >
template<class _tTraits , size_t... _vSeq>
using | ordered_bitseg_traits = nodep::ordered_bitseg_traits< _tTraits, _vSeq... >
template<typename _tDst , typename _tSrc >
using | is_narrowing_from_floating_to_integer = and_< is_integral< _tDst >, is_floating_point< _tSrc > >
template<typename _tDst , typename _tSrc >
using | is_narrowing_from_floating_to_floating = and_< is_floating_point< _tDst >, is_floating_point< _tSrc >, is_same< common_type_t< _tDst, _tSrc >, _tSrc > >
template<typename _tDst , typename _tSrc >
using | is_narrowing_from_floating = or_< is_narrowing_from_floating_to_integer< _tDst, _tSrc >, is_narrowing_from_floating_to_floating< _tDst, _tSrc > >
template<class _tMutex = std::mutex, class _tLock = std::unique_lock<_tMutex>>
using | unlock_delete = threading::unlock_delete< _tMutex, _tLock >
| 解锁删除器：默认使用标准库互斥量和锁。 更多...
template<typename _type , class _tMutex = std::mutex, class _tLock = std::unique_lock<_tMutex>>
using | locked_ptr = threading::locked_ptr< _type, _tMutex, _tLock >
| 独占所有权的锁定指针：默认使用标准库互斥量和锁。 更多...
template<class _tAssocCon , typename _tKey , typename... _tParams>
using | is_piecewise_mapped = is_constructible< typename _tAssocCon::value_type, std::piecewise_construct_t, std::tuple< _tKey && >, std::tuple< _tParams &&... > >
| 判断关联容器、键和参数类型是否可以按 map 的方式无转移地构造。 更多...
using | unique_file_ptr = std::unique_ptr< std::FILE, decltype(std::fclose)& >
| 独占所有权的 C 标准库流指针或实现提供的等价类型。 更多...
template<typename _tChar , typename _type = void>
using | enable_if_irreplaceable_char_t = enable_if_t< nor_< is_trivially_replaceable< _tChar, char >, is_trivially_replaceable< _tChar, wchar_t > >::value, _type >
| 选择不和 char 或 wchar_t 可替换字符类类型的特定重载以避免冲突。 更多...
using | uchar_t = cond_t< is_trivially_replaceable< wchar_t, char16_t >, char16_t, cond_t< is_trivially_replaceable< wchar_t, char32_t >, char32_t, void > >
| 指定和 `wchar_t` 互相替换存储的非 `char` 内建字符类型。 更多...
template<typename _type >
using | wrapped_enum_traits_t = _t< wrapped_enum_traits< _type > >
template<typename _fCallable >
using | make_parameter_list_t = _t< make_parameter_list< _fCallable > >
template<typename _fCallable >
using | return_of_t = _t< return_of< _fCallable > >
template<size_t _vIdx, typename _fCallable >
using | parameter_of_t = _t< parameter_of< _vIdx, _fCallable > >
template<typename _tRet , class _tTuple >
using | make_function_type_t = _t< make_function_type< _tRet, _tTuple > >
template<typename _fCallable >
using | as_function_type_t = make_function_type_t< return_of_t< _fCallable >, make_parameter_list_t< _fCallable > >
| 取内建函数类型。 更多...
template<template< typename... > class _gOp, typename _func , typename... _tParams>
using | enable_fallback_t = enable_if_t<!is_detected< _gOp, _tParams &&... >::value, decltype(std::declval< _func >()(std::declval< _tParams >()...))>
| 启用备用重载。 更多...
template<typename _type , size_t _vN = 1, typename _tParam = _type>
using | id_func_t = make_function_type_t< _type, vseq::join_n_t< _vN, empty_base< _tParam > >>
| 取指定维数和指定参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _type , size_t _vN = 1>
using | id_func_clr_t = id_func_t< _type, _vN, const _type & >
| 取指定维数和 const 左值引用参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _type , size_t _vN = 1>
using | id_func_rr_t = id_func_t< _type, _vN, _type && >
| 取指定维数和 const 右值引用参数类型的多元映射扩展恒等函数类型。 更多...
template<typename _fSig >
using | unchecked_function = function_base< function_traits< _fSig, empty_function_policy::no_check >, _fSig >
template<typename _fSig >
using | optional_function = function_base< function_traits< _fSig, empty_function_policy::no_effect >, _fSig >
template<typename _fSig >
using | function = function_base< function_traits< _fSig, empty_function_policy::throwing >, _fSig >
| 函数包装类模板。 更多...
template<typename _func , typename _fCallable >
using | is_expandable = is_constructible< _func, expanded_caller< as_function_type_t< _func >, _fCallable > >
| 判断可调用类型是可展开到指定函数对象的类型。 更多...
template<typename _fComp , typename _tDummy , typename _type = void>
using | enable_if_transparent_t = enable_if_t< has_mem_is_transparent< _fComp, _tDummy >::value, _type >
| 移除不满足包含 is_transparent 成员类型比较器的重载。 更多...
template<typename _fCallable , typename... _tParams>
using | future_result_t = std::future< invoke_result_t< _fCallable, _tParams... > >
template<typename _fCallable , typename... _tParams>
using | packed_task_t = std::packaged_task< invoke_result_t< _fCallable, _tParams... >()>
template<size_t... _vSeq>
using | index_sequence = integer_sequence< size_t, _vSeq... >
template<typename _tInt , _tInt _vBase, class _tSeq >
using | make_successor_t = _t< make_successor< _tInt, _vBase, _tSeq > >
template<typename _tInt , _tInt _vBase, size_t _vN>
using | make_peano_sequence_t = _t< make_peano_sequence< _tInt, _vBase, _vN > >
template<typename _tInt , size_t _vN>
using | make_natural_sequence = make_peano_sequence< _tInt, 0, _vN >
| 取自然数序列。 更多...
template<typename _tInt , size_t _vN>
using | make_natural_sequence_t = _t< make_natural_sequence< _tInt, _vN > >
template<typename _tInt , _tInt _vDefault, _tInt... _values>
using | same_value_as = is_same< integer_sequence< _tInt, _vDefault, _values... >, integer_sequence< _tInt, _values..., _vDefault > >
| 判断是否具有相同的指定值。 更多...
template<typename _tInt , size_t _vN>
using | make_integer_sequence = make_natural_sequence_t< _tInt, _vN >
template<size_t _vN>
using | make_index_sequence = make_integer_sequence< size_t, _vN >
template<typename... _types>
using | index_sequence_for = make_index_sequence< sizeof...(_types)>
template<bool _vInt>
using | bool_ = integral_constant< bool, _vInt >
template<char _vInt>
using | char_ = integral_constant< char, _vInt >
template<int _vInt>
using | int_ = integral_constant< int, _vInt >
template<long long _vInt>
using | llong_ = integral_constant< long long, _vInt >
template<long _vInt>
using | long_ = integral_constant< long, _vInt >
template<short _vInt>
using | short_ = integral_constant< short, _vInt >
template<unsigned long long _vInt>
using | ullong_ = integral_constant< unsigned long long, _vInt >
template<unsigned long _vInt>
using | ulong_ = integral_constant< unsigned long, _vInt >
template<unsigned _vInt>
using | uint_ = integral_constant< unsigned, _vInt >
template<unsigned short _vInt>
using | ushort_ = integral_constant< unsigned short, _vInt >
template<size_t _vInt>
using | size_t_ = integral_constant< size_t, _vInt >
template<ptrdiff_t _vInt>
using | ptrdiff_t_ = integral_constant< ptrdiff_t, _vInt >
using | true_ = bool_< true >
using | false_ = bool_< false >
template<bool _b>
using | bool_constant = bool_< _b >
| bool 常量。 更多...
template<class... _b>
using | conjunction = and_< _b... >
template<class... _b>
using | disjunction = or_< _b... >
template<class _b >
using | negation = not_< _b >
template<typename _type , typename _tRes = pseudo_output>
using | nonvoid_result_t = cond_t< not_< is_void< _type > >, _type, pseudo_output >
| 若类型不是空类型则取后备结果类型（默认为 pseudo_output ）。 更多...
template<typename _type , typename _tRes = pseudo_output>
using | object_result_t = cond_t< is_object< _type >, _type, pseudo_output >
| 若类型不是对象类型则取后备结果类型（默认为 pseudo_output ）。 更多...
template<typename _type >
using | member_target_type_t = _t< details::member_target_type_impl< _type > >
| 取成员指针类型指向的类类型。 更多...
template<typename _fCallable , typename _type , typename... _tParams>
using | invoke_mem_fn_ref_t = decltype((std::declval< _type >().*std::declval< _fCallable >())(std::declval< _tParams >()...))
| INVOKE 调用分派。 更多...
template<typename _fCallable , typename _type , typename... _tParams>
using | invoke_mem_fn_deref_t = decltype(((*std::declval< _type >()).*std::declval< _fCallable >())(std::declval< _tParams >()...))
template<typename _fCallable , typename _type >
using | invoke_mem_obj_ref_t = decltype(std::declval< _type >().*std::declval< _fCallable >())
template<typename _fCallable , typename _type >
using | invoke_mem_obj_deref_t = decltype((*std::declval< _type >()).*std::declval< _fCallable >())
template<typename _fCallable , typename... _tParams>
using | invoke_other_t = decltype(std::declval< _fCallable >()(std::declval< _tParams >()...))
template<typename _fCallable , typename... _tParams>
using | invoke_result_t = _t< invoke_result< _fCallable, _tParams... > >
template<typename _tIter , typename _tSlave , class _tTraits = std::iterator_traits<_tIter>>
using | pair_iterator = tuple_iterator< _tIter, _tTraits, _tSlave >
| 成对迭代器。 更多...
template<typename _tIter , typename _tTraits = std::iterator_traits<_tIter>>
using | iterator_operators_t = _t< details::iterator_operators< _tIter, _tTraits > >
| 按迭代器类别取可实现迭代器的重载操作符集合的实现。 更多...
template<typename _type , typename _tIter >
using | has_iterator_value_type = is_same< typename std::iterator_traits< _tIter >::value_type, _type >
| 判断迭代器是否具有相同的指定的值类型。 更多...
template<typename _tParam , typename _type = void, typename = indirect_t<_tParam&>, typename = increment_t<_tParam&>>
using | enable_for_iterator_t = enable_if_t< details::iterator_reqirement_t< _tParam >::value, _type >
| 选择迭代器类型的特定重载避免和其它类型冲突。 更多...
template<typename _tParam , typename _type = void, typename = indirect_t<_tParam&>, typename = increment_t<_tParam&>>
using | enable_for_input_iterator_t = enable_if_t< details::input_iterator_reqirement_t< _tParam >::value, _type >
| 选择输入迭代器类型的特定重载避免和其它类型冲突。 更多...
template<class _tDeleter >
using | deleter_member_pointer_t = typename remove_reference_t< _tDeleter >::pointer
| 取删除器的 `pointer` 成员类型。 更多...
template<typename _type , class _tDeleter >
using | unique_ptr_pointer = detected_or_t< _type *, deleter_member_pointer_t, _tDeleter >
| 取 unique_ptr 包装的指针类型。 更多...
template<typename _tPointer , typename _tDefault = void>
using | defer_element = cond_or< not_< is_void< remove_pointer_t< _tPointer > >>, _tDefault, indirect_element_t, _tPointer >
| 取指针对应的元素类型。 更多...
template<class _type >
using | _t = typename _type::type
| 嵌套类型别名。 更多...
template<typename _type >
using | remove_const_t = typename remove_const< _type >::type
| ISO C++ 14 兼容类型操作别名。 更多...
template<typename _type >
using | remove_volatile_t = typename remove_volatile< _type >::type
template<typename _type >
using | remove_cv_t = typename remove_cv< _type >::type
template<typename _type >
using | add_const_t = typename add_const< _type >::type
template<typename _type >
using | add_volatile_t = typename add_volatile< _type >::type
template<typename _type >
using | add_cv_t = typename add_cv< _type >::type
template<typename _type >
using | remove_reference_t = typename remove_reference< _type >::type
template<typename _type >
using | add_lvalue_reference_t = typename add_lvalue_reference< _type >::type
template<typename _type >
using | add_rvalue_reference_t = typename add_rvalue_reference< _type >::type
template<typename _type >
using | make_signed_t = typename make_signed< _type >::type
template<typename _type >
using | make_unsigned_t = typename make_unsigned< _type >::type
template<typename _type >
using | remove_extent_t = typename remove_extent< _type >::type
template<typename _type >
using | remove_all_extents_t = typename remove_all_extents< _type >::type
template<typename _type >
using | remove_pointer_t = typename remove_pointer< _type >::type
template<typename _type >
using | add_pointer_t = typename add_pointer< _type >::type
template<size_t _vLen, size_t _vAlign = std::alignment_of< typename aligned_storage<_vLen>::type >::value>
using | aligned_storage_t = typename aligned_storage< _vLen, _vAlign >::type
template<size_t _vLen, typename... _types>
using | aligned_union_t = typename aligned_union< _vLen, _types... >::type
template<typename _type >
using | decay_t = typename decay< _type >::type
template<bool _bCond, typename _type = void>
using | enable_if_t = typename enable_if< _bCond, _type >::type
template<bool _bCond, typename _type , typename _type2 >
using | conditional_t = typename conditional< _bCond, _type, _type2 >::type
template<typename... _types>
using | common_type_t = typename common_type< _types... >::type
template<typename _type >
using | underlying_type_t = typename underlying_type< _type >::type
template<typename _type >
using | remove_cvref_t = _t< remove_cvref< _type > >
template<typename _type , typename... _types>
using | well_formed_t = typename always< _type >::template apply< _types... >::type
| void_t 的一般化，可指定别名类型。 更多...
template<typename... _types>
using | void_t = well_formed_t< void, _types... >
template<typename... _types>
using | when_valid = well_formed_t< when< true >, _types... >
| 类似 void_t 的元函数，但具有较低匹配优先级，避免偏特化歧义。 更多...
template<bool _bCond>
using | enable_when = enable_if_t< _bCond, when< true > >
| 类似 enable_if_t 的元函数，但具有较低匹配优先级，避免偏特化歧义。 更多...
template<template< typename... > class _gOp, typename... _tParams>
using | is_detected = typename details::detector< nonesuch, void, _gOp, _tParams... >::value_t
template<template< typename... > class _gOp, typename... _tParams>
using | detected_t = _t< details::detector< nonesuch, void, _gOp, _tParams... > >
template<typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | detected_or = details::detector< _tDefault, void, _gOp, _tParams... >
template<typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | detected_or_t = _t< detected_or< _tDefault, _gOp, _tParams... > >
template<typename _tExpected , template< typename... > class _gOp, typename... _tParams>
using | is_detected_exact = is_same< _tExpected, detected_t< _gOp, _tParams... > >
template<typename _tTo , template< typename... > class _gOp, typename... _tParams>
using | is_detected_convertible = is_convertible< detected_t< _gOp, _tParams... >, _tTo >
template<typename _tCond , typename _tThen = true_, typename _tElse = false_>
using | cond = conditional< _tCond::value, _tThen, _tElse >
| 条件判断。 更多...
template<typename _tCond , typename _tThen = true_, typename _tElse = false_>
using | cond_t = _t< cond< _tCond, _tThen, _tElse > >
template<typename _type >
using | identity_t = _t< identity< _type > >
template<typename _type >
using | sizeof_t = size_t_< sizeof(_type)>
template<typename _tFrom , typename _tTo , typename _type = void>
using | enable_if_convertible_t = enable_if_t< is_convertible< _tFrom, _tTo >::value, _type >
template<typename _tFrom , typename _tTo , typename _type = void>
using | enable_if_inconvertible_t = enable_if_t<!is_convertible< _tFrom, _tTo >::value, _type >
template<typename _type1 , typename _type2 , typename _type = void>
using | enable_if_interoperable_t = enable_if_t< is_interoperable< _type1, _type2 >::value, _type >
template<typename _type1 , typename _type2 , typename _type = void>
using | enable_if_same_t = enable_if_t< is_same< _type1, _type2 >::value, _type >
template<typename _type1 , typename _type2 , typename _type = void>
using | enable_if_same_param_t = enable_if_t< is_same_param< _type1, _type2 >::value, _type >
template<typename _tSelected , typename _tParam , typename _type = void>
using | exclude_self_t = enable_if_t<!is_same_param< _tSelected, _tParam >::value, _type >
| 排除选择类型的特定参数的重载。 更多...
template<typename... _types>
using | wrap_mixin_t = mixin< classify_value_t< _types >... >
| 包装为混入类。 更多...
template<typename _type >
using | optional_relop_t = enable_if_t< is_convertible< _type, bool >::value, bool >
| 保留可选的比较操作对象类型的比较操作结果类型。 更多...
template<typename _type , typename _tPointer = _type*>
using | placement_ptr = std::unique_ptr< _type, placement_delete< _type, _tPointer > >
| 独占放置存储的对象所有权的指针。 更多...
template<typename _type >
using | tidy_ptr = nptr< observer_ptr< _type > >
template<typename _tRange >
using | range_iterator_t = decltype(ystdex::begin(std::declval< _tRange & >()))
template<typename _tRange >
using | range_const_iterator_t = decltype(ystdex::cbegin(std::declval< const _tRange & >()))
template<size_t _vFrac, size_t _vInt = 1, bool _bSigned = false>
using | make_fixed_t = fixed_point< conditional_t< _bSigned, typename make_width_int< _vFrac+_vInt >::least_type, typename make_width_int< _vFrac+_vInt >::unsigned_least_type >, _vFrac >
| 取包括指定有效二进制位和至少指定位整数的定点数类型。 更多...
template<typename _type >
using | unwrap_reference_t = _t< unwrap_reference< _type > >
template<typename _type >
using | unwrap_ref_decay_t = _t< unwrap_ref_decay< _type > >
template<typename _type , typename _tCond = bool, typename _tReference = _type&>
using | swap_guard = state_guard< _type, _tCond, _tReference >
| 使用 ystdex::vswap 调用暂存对象的作用域守卫。 更多...
using | membuf = basic_membuf< char >
using | wmembuf = basic_membuf< wchar_t >
using | string = basic_string< char >
using | u16string = basic_string< char16_t >
using | u32string = basic_string< char32_t >
using | wstring = basic_string< wchar_t >
template<typename _tParam , typename _type = void>
using | enable_for_string_class_t = enable_if_t< is_string_class< decay_t< _tParam > >::value, _type >
| 选择字符串类类型的特定重载避免和其它非字符串类型冲突。 更多...
template<class _tStream >
using | stream_str_t = decltype(std::declval< _tStream & >().str())
using | string_view = basic_string_view< char >
using | u16string_view = basic_string_view< char16_t >
using | u32string_view = basic_string_view< char32_t >
using | wstring_view = basic_string_view< wchar_t >
template<class _tString >
using | string_view_t = basic_string_view< typename _tString::value_type >
| 取字符串类类型的值类型对应的字符串视图类型。 更多...
template<typename _type >
using | is_swap_movable = and_< is_move_constructible< _type >, is_move_assignable< _type > >
template<typename _type >
using | is_nothrow_swap_movable = and_< is_nothrow_move_constructible< _type >, is_nothrow_move_assignable< _type > >
template<typename _tSwapped , typename _type = void>
using | enable_if_swap_movable_t = enable_if_t< is_swap_movable< _tSwapped >::value, _type >
using | tstring_view = basic_tstring_view< char >
using | u16tstring_view = basic_tstring_view< char16_t >
using | u32tstring_view = basic_tstring_view< char32_t >
using | wtstring_view = basic_tstring_view< wchar_t >
template<size_t _vIdx, typename _type >
using | tuple_element_t = _t< std::tuple_element< _vIdx, _type > >
template<typename _type , class _tCtor >
using | is_instance_of = is_same< detected_or_t< void, details::ctor_of_or_void_t, _type >, _tCtor >
| 判断类型是否是指定类型构造器的实例。 更多...
template<typename _type >
using | underlying_cond_type_t = _t< cond_t< is_enum< _type >, vdefer< underlying_type_t, _type >, identity< _type > >>
| 取底层类型。 更多...
template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | cond_or = cond_t< _tCond, vdefer< _gOp, _tParams... >, identity< _tDefault > >
| 条件判断，若失败使用默认类型。 更多...
template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>
using | cond_or_t = _t< cond_or< _tCond, _tDefault, _gOp, _tParams... > >
template<typename _type , typename... _types>
using | common_nonvoid_t = cond_or_t< is_void< _type >, _type, common_type_t, _types... >
| 取公共非空类型：若第一参数为非空类型则为第一参数，否则从其余参数推断。 更多...
template<typename... _types>
using | common_underlying_t = common_type_t< underlying_cond_type_t< _types >... >
| 取公共底层类型。 更多...
template<typename _tSelected , typename... _tParams>
using | exclude_self_params_t = enable_if_t< not_< cond_or_t< bool_< sizeof...(_tParams)==1 >, false_, is_same_param, _tSelected, _tParams... > >::value, void >
| 排除选择类型的特定参数类型的重载。 更多...
using | first_tag = n_tag< 0 >
| 第一分量标记。 更多...
using | second_tag = n_tag< 1 >
| 第二分量标记。 更多...
template<typename _tSrc , typename _tDst , typename _type = void>
using | enable_if_replaceable_t = enable_if_t< is_trivially_replaceable< _tSrc, _tDst >::value, _type >
| 选择和特定类型可替换字符类类型的特定重载以避免冲突。 更多...
template<typename _type , size_t _vAlign = std::alignment_of< _type >::value>
using | pun_storage_t = aligned_storage_t< sizeof(_type), _vAlign >
| 显式转换的替代对齐存储对齐存储类型。 更多...
template<typename _type >
using | pun_ptr = placement_ptr< decay_t< _type > >
| 避免严格别名分析限制的缓冲独占所有权指针。 更多...
template<typename _type , size_t _vAlign = std::alignment_of< _type >::value>
using | replace_storage_t = standard_layout_storage< pun_storage_t< _type, _vAlign > >
| 显式转换的替代标准布局替代存储类型。 更多...
template<typename _type >
using | id_t = _type
template<typename _type >
using | add_ptr_t = _type *
template<typename _type >
using | add_ref_t = _type &
template<typename _type >
using | add_rref_t = _type &&
template<typename _type >
using | addrof_t = decltype(&std::declval< _type >())
template<typename _type >
using | indirect_t = decltype(*std::declval< _type >())
template<typename _type >
using | indirect_element_t = remove_reference_t< indirect_t< _type > >
template<typename _type >
using | increment_t = decltype(++std::declval< _type >())
template<typename _type >
using | increment_post_t = decltype(std::declval< _type >() --)
template<typename _type >
using | decrement_t = decltype(++std::declval< _type >())
template<typename _type >
using | decrement_post_t = decltype(std::declval< _type >() --)
template<typename _type , typename _type2 >
using | subscript_t = decltype(std::declval< _type >()[std::declval< _type2 >()])
template<typename _type , typename _type2 = _type>
using | equal_t = decltype(std::declval< _type >()==std::declval< _type2 >())
template<typename _type , typename _type2 = _type>
using | not_equal_t = decltype(std::declval< _type >() !=std::declval< _type2 >())
template<typename _type >
using | first_t = decltype(std::declval< _type >().first)
template<typename _type >
using | second_t = decltype(std::declval< _type >().second)
template<typename _type , typename _type2 >
using | forward_like_t = conditional_t< is_lvalue_reference< _type >::value, remove_reference_t< _type2 > &, remove_reference_t< _type2 > && >
| 按指定类型蕴含的值类别传递参数的结果类型。 更多...
template<typename _type >
using | classify_value_t = cond_t< std::is_class< _type >, _type, boxed_value< _type > >
| 包装非类类型为类类型。 更多...

## 枚举

enum | byte_order { byte_order::unknown = 0, byte_order::neutral = 1, byte_order::little = 2, byte_order::big = 3, byte_order::PDP = 4 }
| 字节序。 更多...
enum | empty_function_policy { empty_function_policy::no_check, empty_function_policy::no_effect, empty_function_policy::throwing }
| 空函数策略。 更多...
enum | path_category : size_t { path_category::empty, path_category::self, path_category::parent, path_category::node }
| 路径类别。 更多...

## 函数

template<typename _type , typename... _tParams>
auto | unsequenced (_type &&arg, _tParams &&...) -> decltype(std::forward< decltype(arg)>(arg))
| 无序列依赖表达式组求值实现。 更多...
template<typename _type >
enable_if_t< has_no_overloaded_addressof< _type >::value, _type * > | addressof (_type &r)
| 尝试对非重载 operator& 提供 constexpr 的 std::addressof 替代。 更多...
template<typename _type , typename = enable_if_t<!has_no_overloaded_addressof<_type>::value>>
_type * | addressof (_type &r)
template<class _type >
const _type * | addressof (const _type &&)=delete
template<typename _type >
enable_if_t< or_< is_object< _type >, is_void< _type > >::value, void * > | pvoid (_type *p)
| 取 `void*` 类型的指针。 更多...
template<typename _type >
enable_if_t< is_function< _type >::value, void * > | pvoid (_type *p)
template<typename _type >
void * | pvoid_ref (_type &&ref)
template<typename _tIn , typename _fPred >
bool | fast_all_of (_tIn first, _tIn last, _fPred pred)
| 快速序列判断操作。 更多...
template<typename _tIn , typename _fPred >
bool | fast_any_of (_tIn first, _tIn last, _fPred pred)
template<typename _tIn , typename _fPred >
bool | fast_none_of (_tIn first, _tIn last, _fPred pred)
template<typename _tIn , typename _fPred >
bool | strict_all_of (_tIn first, _tIn last, _fPred pred)
| 严格序列判断操作。 更多...
template<typename _tIn , typename _fPred >
bool | strict_any_of (_tIn first, _tIn last, _fPred pred)
template<typename _tIn , typename _fPred >
bool | strict_none_of (_tIn first, _tIn last, _fPred pred)
template<typename _tIn , typename _func , typename _type >
_func | for_each_equal (_tIn first, _tIn last, const _type &value, _func f)
template<typename _tIn , typename _func , typename _fPred >
_func | for_each_if (_tIn first, _tIn last, _fPred pred, _func f)
template<typename _tIn1 , typename _tIn2 , typename _fBiPred >
bool | equal (_tIn1 first1, _tIn1 last1, _tIn2 first2, _tIn2 last2, _fBiPred binary_pred)
template<typename _tIn1 , typename _tIn2 >
bool | equal (_tIn1 first1, _tIn1 last1, _tIn2 first2, _tIn2 last2)
template<typename _tFwd , typename _type , typename _fComp = less<_type>>
_tFwd | lower_bound_n (_tFwd first, typename std::iterator_traits< _tFwd >::difference_type n, const _type &value, _fComp comp=less< _type >())
template<typename _tFwd , typename _type , typename _fComp = less<_type>>
_tFwd | upper_bound_n (_tFwd first, typename std::iterator_traits< _tFwd >::difference_type n, const _type &value, _fComp comp=less< _type >())
| 取有序范围内的迭代器上界。 更多...
template<typename _fPred , typename _fInsert , typename _tIn >
void | split (_tIn b, _tIn e, _fPred is_delim, _fInsert insert)
| 以指定分隔符分割序列。 更多...
template<typename _fPred , typename _fInsert , typename _func , typename _tIn >
void | split_if (_tIn b, _tIn e, _fPred is_delim, _fInsert insert, _func pred)
| 以满足迭代器谓词的指定分隔符分割序列。 更多...
template<typename _fPred , typename _fInsert , typename _tIn >
_tIn | split_l (_tIn b, _tIn e, _fPred is_delim, _fInsert insert)
| 以指定分隔符分割保留起始分隔符的序列。 更多...
template<typename _tIn , typename _tOut , typename _fPred , typename _fOp >
_tOut | transform_when (_tIn first, _tOut result, _fPred pred, _fOp op)
| 变换满足谓词的序列的连续元素。 更多...
template<typename _tIn , typename _tOut , typename _fPred >
_tOut | copy_when (_tIn first, _tOut result, _fPred pred)
| 复制满足谓词的序列的连续元素。 更多...
template<typename _fOp , typename _tOut , typename... _tIns>
void | transform_n (_fOp op, _tOut result, size_t n, _tIns... iters)
| 指定数量的序列变换。 更多...
template<typename _type >
_type * | trivially_fill_n (_type *first, size_t n=1, byte value={})
| 填充字节序列。 更多...
template<typename _type >
void | trivially_fill (_type *first, _type *last, byte value={})
template<typename _type >
_type * | trivially_copy_n (const _type *first, size_t n, _type *result)
| 复制不覆盖的序列。 更多...
template<typename _type >
_type * | trivially_copy (const _type *first, const _type *last, _type *result)
template<class _type >
_type * | trivially_move_n (const _type *first, size_t n, _type *result)
| 复制可能覆盖的序列。 更多...
template<class _type >
_type * | trivially_move (const _type *first, const _type *last, _type *result)
template<typename _tFwd >
_tFwd | stable_unique (_tFwd first, _tFwd last)
| 去除迭代器指定的范围中的重复元素，且不改变元素之间的相对顺序。 更多...
template<typename _tFwd , typename _fPred >
_tFwd | stable_unique (_tFwd first, _tFwd last, _fPred pred)
template<typename _tRandom >
_tRandom | sort_unique (_tRandom first, _tRandom last)
| 排序指定序列范围，保留不重复元素的区间。 更多...
template<typename _type , typename _fComp = less<_type>>
const _type & | min (const _type &a, const _type &b, _fComp comp=less< _type >())
| 取较小的元素。 更多...
template<typename _type , typename _fComp = less<_type>>
const _type & | min (std::initializer_list< _type > t, _fComp comp=less< _type >(), size_t n=0)
template<typename _type , typename _fComp = less<_type>>
const _type & | max (const _type &a, const _type &b, _fComp comp=less< _type >())
| 取较大的元素。 更多...
template<typename _type , typename _fComp = less<_type>>
const _type & | max (std::initializer_list< _type > t, _fComp comp=less< _type >(), size_t n=0)
template<typename _type , typename _fComp >
const _type & | clamp (const _type &v, const _type &lo, const _type &hi, _fComp comp)
template<typename _type >
const _type & | clamp (const _type &v, const _type &lo, const _type &hi)
template<typename _tIn , typename _tOut , typename _fComp = less<>>
_tOut | clamp_range (_tIn first, _tIn last, _tOut result, const typename std::iterator_traits< _tIn >::value_type &lo, const typename std::iterator_traits< _tIn >::value_type &hi, _fComp comp=_fComp())
template<typename _type , class _tAlloc , typename... _tParams>
auto | uses_allocator_construction_args (const _tAlloc &a, _tParams &&... args) -> decltype(details::uses_allocator_args< _type >(details::is_pair< _type >(), details::pair_has_allocator< _type, _tAlloc >(), is_constructible< _type, std::allocator_arg_t, _tAlloc, _tParams... >(), a, std::forward< _tParams && >(args)...))
template<typename _type , class _tAlloc , typename... _tParams>
_type | make_obj_using_allocator (const _tAlloc &a, _tParams &&... args)
template<typename _type , class _tAlloc , typename... _tParams>
_type * | uninitialized_construct_using_allocator (_type *p, const _tAlloc &a, _tParams &&... args)
template<class _tAlloc >
allocator_guard< _tAlloc > | make_allocator_guard (_tAlloc &a, typename allocator_traits< _tAlloc >::size_type n=1)
| 构造分配器守卫。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
auto | create_with_allocator (_tAlloc &&a, _tParams &&... args) -> std::unique_ptr< _type, allocator_delete< remove_cvref_t< _tAlloc >>>
| 使用分配器创建对象。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
auto | allocate_unique (const _tAlloc &alloc, _tParams &&... args) -> std::unique_ptr< _type, allocator_delete< rebind_alloc_t< _tAlloc, _type >>>
| 使用分配器创建 std::unique_ptr 。 更多...
template<typename _type , class _tAlloc , typename _tValue >
auto | allocate_unique (const _tAlloc &alloc, std::initializer_list< _tValue > il) -> std::unique_ptr< _type, allocator_delete< rebind_alloc_t< _tAlloc, _type >>>
| 使用分配器和初始化列表参数创建 std::unique_ptr 。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
std::shared_ptr< _type > | allocate_shared (const _tAlloc &alloc, _tParams &&... args)
| 使用分配器创建 std::shared_ptr 。 更多...
template<typename _type , class _tAlloc , typename _tValue >
std::shared_ptr< _type > | allocate_shared (const _tAlloc &alloc, std::initializer_list< _tValue > il)
| 使用分配器和初始化列表参数创建 std::shared_ptr 。 更多...
template<typename _tAlloc >
void | alloc_on_copy (_tAlloc &x, const _tAlloc &y)
| 按分配器特征在传播容器时复制赋值分配器。 更多...
template<typename _tAlloc >
_tAlloc | alloc_on_copy (const _tAlloc &a)
| 按分配器特征在传播容器时复制分配器。 更多...
template<typename _tAlloc >
void | alloc_on_move (_tAlloc &x, _tAlloc &y)
| 按分配器特征在传播容器时转移分配器。 更多...
template<typename _tAlloc >
void | alloc_on_swap (_tAlloc &x, _tAlloc &y)
| 按分配器特征在传播容器时交换分配器。 更多...
template<typename _type , typename _tOther , typename... _tParams>
any | make_any (std::initializer_list< _tOther > il, _tParams &&... args)
template<typename _type >
_type | any_cast (any &x)
| 动态泛型转换。 更多...
template<typename _type >
_type | any_cast (const any &x)
template<typename _type >
_type | any_cast (any &&x)
template<typename _type >
_type * | any_cast (any *p)
template<typename _type >
const _type * | any_cast (const any *p)
bool | hold_same (const any &x, const any &y)
| 判断是否持有相同对象。 更多...
template<typename _type >
_type * | unchecked_any_cast (any *p)
| 未检查的动态泛型转换。 更多...
template<typename _type >
const _type * | unchecked_any_cast (const any *p)
template<typename _type >
_type * | unsafe_any_cast (any *p)
| 非安全动态泛型转换。 更多...
template<typename _type >
const _type * | unsafe_any_cast (const any *p)
template<typename _func , class _tTuple >
auto | apply (_func &&f, _tTuple &&t) -> decltype(call_projection< _tTuple, make_index_sequence< std::tuple_size< decay_t< _tTuple >>::value >>::apply_invoke(std::forward< decltype(f)>(f), std::forward< decltype(t)>(t)))
| 应用函数对象和参数元组。 更多...
template<typename _type , class _tTuple >
_type | make_from_tuple (_tTuple &&t)
| 从元组构造指定类型的值。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | cast_array (_tParams &&... args)
| 构造指定参数转换初始化的 std::array 对象。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | forward_as_array (_tParams &&... args)
| 转移指定参数至 std::array 对象。 更多...
template<typename _type = void, typename... _tParams>
common_array_t< _type, _tParams... > | make_array (_tParams &&... args)
| 构造指定参数初始化的 `std::array` 对象。 更多...
template<typename _type , size_t _vN, typename _tSrc >
std::array< _type, _vN > | to_array (const _tSrc &src)
| 转换指定参数为 `std::array` 对象。 更多...
template<typename _type , size_t _vN>
std::array< _type, _vN > | to_array (const std::array< _type, _vN > &src)
template<typename _type , size_t _vN, typename _tSrcElement >
std::array< _type, _vN > | to_array (const _tSrcElement(&src)[_vN])
template<typename _type , size_t _vN, typename _tSrcElement >
std::array< _type, _vN > | to_array (_tSrcElement(&&src)[_vN])
template<typename _type , size_t _vN, typename _tSrcElement >
std::array< _type, _vN > | to_array (std::initializer_list< _tSrcElement > il)
template<class _tMap , typename _tKey , typename _func , typename... _tParams>
auto | cache_lookup (_tMap &cache, const _tKey &key, _func init, _tParams &&... args) -> decltype((cache.begin() ->second))
| 以指定的关键字查找作为缓存的无序关联容器， 若没有找到使用指定的可调用对象和参数初始化内容。 更多...
void | yassert (const char *, const char *, int, const char *)
| YBase 默认断言函数。 更多...
void | ytrace (std::FILE *, std::uint8_t, std::uint8_t, const char *, int, const char *,...)
| YCLib 调试跟踪函数。 更多...
template<typename _tSrc , typename _tDst = const decay_t<_tSrc>&&>
_tDst | qualify (_tSrc &&arg)
| 允许添加限定符转换。 更多...
template<typename _tDst , typename _tSrc >
_tDst | narrow_cast (_tSrc v)
| 可能缩小数值范围的显式转换。 更多...
template<typename _tDst , typename _tSrc >
_tDst | narrow (_tSrc v)
template<typename _tDst , typename _tSrc >
_tDst | not_widen_cast (_tSrc v)
| 可能缩小数值范围或数值范围最大和最小值保持不变的转换。 更多...
template<typename _tDst , typename _tSrc >
_tDst | not_widen (_tSrc v)
template<typename _pDst , class _tSrc >
_pDst | polymorphic_cast (_tSrc *v)
| 多态类指针类型转换。 更多...
template<typename _pDst , class _tSrc >
_pDst | polymorphic_downcast (_tSrc *v)
| 多态类指针向派生类指针转换。 更多...
template<typename _rDst , class _tSrc >
enable_if_t< is_lvalue_reference< _rDst >::value, _rDst > | polymorphic_downcast (_tSrc &v)
template<typename _rDst , class _tSrc >
enable_if_t< is_rvalue_reference< _rDst >::value &&!is_reference< _tSrc >::value, _rDst > | polymorphic_downcast (_tSrc &&v)
template<class _tDst , typename _tSrc , typename _tDeleter >
enable_if_t<!is_reference< _tDst >::value &&!is_array< _tDst >::value, std::unique_ptr< _tDst, _tDeleter > > | polymorphic_downcast (std::unique_ptr< _tSrc, _tDeleter > &&v)
template<class _tDst , typename _tSrc >
enable_if_t<!is_reference< _tDst >::value &&!is_array< _tDst >::value, std::shared_ptr< _tDst > > | polymorphic_downcast (const std::unique_ptr< _tSrc > &v)
template<typename _pDst , class _tSrc >
_pDst | polymorphic_crosscast (_tSrc *v)
| 多态类指针交叉转换。 更多...
template<typename _rDst , class _tSrc >
_rDst | polymorphic_crosscast (_tSrc &v)
template<typename _rDst , class _tSrc >
enable_if_t<!is_reference< _tSrc >::value, _rDst > | polymorphic_crosscast (_tSrc &&v)
template<typename _tDst , typename _tSrc >
_tDst | general_cast (_tSrc *v)
| 一般类型转换。 更多...
template<typename _tDst , typename _tSrc >
_tDst | general_cast (_tSrc &v)
template<typename _tDst , typename _tSrc >
const _tDst | general_cast (const _tSrc &v)
bool | iscntrl_C0 (char c)
| 判断指定字符是否为 ISO/IEC 2022 定义的 C0 控制字符。 更多...
bool | iscntrl_C1 (char c)
| 判断指定字符是否为 ISO/IEC 2022 定义的 C1 控制字符。 更多...
bool | iscntrl_ASCII (char c)
| 使用 US-ASCII 字符集的 std::isprint 。 更多...
bool | iscntrl_ISO8859_11 (char c)
| 使用 ISO/IEC 8859-11(Latin/Thai) 字符集的 std::iscntrl 。 更多...
bool | iscntrl_ISO8859_1 (char c)
| 使用 ISO/IEC 8859-1 字符集的 std::iscntrl 。 更多...
bool | isprint_ASCII (char c)
| 使用 US-ASCII 字符集的 std::isprint 。 更多...
bool | isprint_ISO8859_1 (char c)
| 使用 ISO/IEC 8859-1 字符集的 std::isprint 。 更多...
bool | isprint (char c)
| 区域无关的 std::isprint 。 更多...
bool | isdigit (char c)
| 区域无关的 std::isdigit 。 更多...
bool | isspace (char c)
| 区域无关的 std::isspace 。 更多...
char | tolower (char c)
| 转换大小写字符。 更多...
template<typename _tChar >
_tChar | towlower (_tChar c)
char | toupper (char c)
template<typename _tChar >
_tChar | towupper (_tChar c)
std::string | to_string (const std::thread::id &)
| 转换 `thread::id` 为字符串表示。 更多...
std::string | get_this_thread_id ()
| 取当前线程标识的字符串表示。 更多...
template<class _tCon , typename _tIter >
_tCon | make_container (_tIter first, _tIter last)
| 构造指定类型的容器。 更多...
template<class _tCon , typename _tRange >
_tCon | make_container (_tRange &&c)
template<class _tCon , typename _tRange , typename _func >
_tCon | make_container (_tRange &&c, _func f)
template<typename _tRange >
auto | range_size (const _tRange &c) -> decltype(details::range_size(c, details::has_range_size< _tRange >()))
| 取范围大小。 更多...
template<typename _tElem >
size_t | range_size (std::initializer_list< _tElem > il)
template<class _tCon , typename... _tParams>
void | assign (_tCon &con, _tParams &&... args)
| 插入参数指定的元素到容器。 更多...
template<class _tCon , typename _type , size_t _vN>
void | assign (_tCon &con, const _type(&arr)[_vN])
template<class _tCon , typename _tIn >
void | concat (_tCon &con, _tIn first, _tIn last)
| 插入元素到容器末尾。 更多...
template<class _tCon , typename _tRange >
void | concat (_tCon &con, _tRange &&c)
template<typename _tCon , typename _tIn >
_tCon::const_iterator | insert_reversed (_tCon &con, typename _tCon::const_iterator i, _tIn first, _tIn last)
| 逆向插入范围到容器的指定位置。 更多...
template<typename _tCon , typename... _tParams>
void | seq_insert (_tCon &con, _tParams &&... args)
| 顺序插入值至指定容器。 更多...
template<class _tCon , typename _tKey >
bool | exists (const _tCon &con, const _tKey &key)
| 判断指定的容器中存在指定的键。 更多...
template<class _tCon , typename _fPred >
bool | exists_if (const _tCon &con, _fPred pred)
| 判断指定的容器中存在满足指定谓词的键。 更多...
template<typename _tCon , typename _tIter >
void | erase_all (_tCon &con, _tIter first, _tIter last)
| 删除指定容器中指定区间中的或全部元素。 更多...
template<typename _tCon , typename _tIter , typename _type >
void | erase_all (_tCon &con, _tIter first, _tIter last, const _type &value)
template<typename _tCon , typename _type >
void | erase_all (_tCon &con, const _type &value)
template<typename _tCon , typename _tIter , typename _fPred >
void | erase_all_if (_tCon &con, _tIter first, _tIter last, _fPred pred)
| 删除指定容器中指定区间中的或全部满足谓词的元素。 更多...
template<typename _tCon , typename _fPred >
void | erase_all_if (_tCon &con, _fPred pred)
template<class _tAssocCon , typename _tKey >
bool | erase_first (_tAssocCon &con, const _tKey &k)
| 删除指定关联容器中等价于指定键的起始元素。 更多...
template<class _tAssocCon >
_tAssocCon::size_type | erase_multi (_tAssocCon &con, const typename _tAssocCon::key_type &k)
| 删除指定关联容器中等价于指定键的所有元素。 更多...
template<class _tAssocCon , typename _tKey >
_tAssocCon::size_type | erase_multi (_tAssocCon &con, const _tKey &k)
template<typename _tCon >
_tCon::const_iterator | erase_n (_tCon &con, typename _tCon::const_iterator i, typename _tCon::difference_type n)
| 删除指定容器中指定迭代器起始指定数量的元素。 更多...
template<typename _tCon >
_tCon::iterator | erase_n (_tCon &con, typename _tCon::iterator i, typename _tCon::difference_type n)
template<class _tCon >
_tCon::iterator | cast_mutable (_tCon &con, typename _tCon::const_iterator i)
| 移除 const_iterator 的 const 限定。 更多...
template<class _tCon , typename _type >
std::pair< typename _tCon::iterator, _type > | cast_mutable (_tCon &con, const std::pair< typename _tCon::const_iterator, _type > &pr)
template<class _tCon >
void | sort_unique (_tCon &con)
| 排序指定序列容器，保留不重复元素。 更多...
template<class _tCon >
_tCon && | trail (_tCon &&con, const typename decay_t< _tCon >::value_type &value={})
| 保证非空容器以参数指定的元素结尾。 更多...
template<class _tCon , typename _tParam1 , typename _tParam2 , typename... _tParams>
_tCon && | trail (_tCon &&con, _tParam1 &&arg1, _tParam2 &&arg2, _tParams &&... args)
template<class _tCon >
bool | pop_back_val (_tCon &con, const typename _tCon::value_type &value)
| 若容器末尾存在指定值的元素则移除。 更多...
template<class _tCon >
bool | pop_front_val (_tCon &con, const typename _tCon::value_type &value)
| 若容器起始存在指定值的元素则移除。 更多...
template<class _tVector , typename _tIn >
void | vector_concat (_tVector &vec, _tIn first, _tIn last)
| 插入元素到 `vector` 末尾。 更多...
template<class _tVector , typename _tRange >
void | vector_concat (_tVector &vec, _tRange &&c)
template<class _tVector , typename _func >
_tVector | retry_for_vector (typename _tVector::size_type s, _func f)
| 从第一参数指定的起始缓冲区大小循环取向量结果，按需扩大缓冲区。 更多...
template<class _tAssocCon , typename _tKey , typename _func >
auto | replace_value (_tAssocCon &con, const _tKey &k, _func f) -> decltype(con.emplace_hint(con.erase(con.find(k)), f(*con.find(k))))
| 替换关联容器的值。 更多...
template<class _tAssocCon , typename _tKey , typename... _tParams>
auto | emplace_hint_in_place (_tAssocCon &con, typename _tAssocCon::const_iterator hint, _tKey &&k, _tParams &&... args) -> typename _tAssocCon::iterator
| 带有提示的原地插入构造。 更多...
template<class _tAssocCon , typename _type , typename = enable_if_convertible_t<const _type&, const typename _tAssocCon::value_type&>>
const _tAssocCon::key_type & | extract_key (const _type &val)
| 从关联容器的值取键。 更多...
template<class _tAssocCon , typename _type , typename = enable_if_convertible_t<_type&, typename _tAssocCon::value_type&>>
auto | extract_mapped (_type &val) -> decltype(details::assoc_con_traits< _tAssocCon >::extract_mapped(is_detected< details::mapped_type_t, _tAssocCon >(), val))
| 从关联容器的值取映射的值。 更多...
template<class _tAssocCon , typename _tKey >
std::pair< typename _tAssocCon::const_iterator, bool > | search_map (const _tAssocCon &con, const _tKey &k)
| 按指定键搜索指定关联容器。 更多...
template<class _tAssocCon , typename _tKey >
std::pair< typename _tAssocCon::iterator, bool > | search_map (_tAssocCon &con, const _tKey &k)
template<class _tAssocCon , typename _tKey >
std::pair< typename _tAssocCon::const_iterator, bool > | search_map (const _tAssocCon &con, typename _tAssocCon::const_iterator hint, const _tKey &k)
| 按指定键和提示的迭代器位置搜索指定关联容器。 更多...
template<class _tAssocCon , typename _tKey >
std::pair< typename _tAssocCon::iterator, bool > | search_map (_tAssocCon &con, typename _tAssocCon::const_iterator hint, const _tKey &k)
template<typename _func , class _tAssocCon , typename... _tParams>
std::pair< typename _tAssocCon::const_iterator, bool > | search_map_by (_func f, const _tAssocCon &con, _tParams &&... args)
| 按指定键值搜索指定映射并执行操作。 更多...
template<typename _func , class _tAssocCon , typename... _tParams>
std::pair< typename _tAssocCon::iterator, bool > | search_map_by (_func f, _tAssocCon &con, _tParams &&... args)
template<class _tAssocCon , typename _tKey , typename... _tParams>
std::pair< typename _tAssocCon::iterator, bool > | try_emplace (_tAssocCon &con, _tKey &&k, _tParams &&... args)
template<class _tAssocCon , typename _tKey , typename... _tParams>
std::pair< typename _tAssocCon::iterator, bool > | try_emplace_hint (_tAssocCon &con, typename _tAssocCon::const_iterator hint, _tKey &&k, _tParams &&... args)
template<class _tAssocCon , typename _tKey , typename _tParam >
std::pair< typename _tAssocCon::iterator, bool > | insert_or_assign (_tAssocCon &con, _tKey &&k, _tParam &&arg)
template<class _tAssocCon , typename _tKey , typename _tParam >
std::pair< typename _tAssocCon::iterator, bool > | insert_or_assign_hint (_tAssocCon &con, typename _tAssocCon::const_iterator hint, _tKey &&k, _tParam &&arg)
void | restore_signal (int sig)
| 调用 `signal` 重置默认信号处理器。 更多...
void | reraise (int sig)
| 调用 restore_signal 重置默认信号处理器后调用 `raise` 引发信号。 更多...
byte_order | native_byte_order ()
| 测试本机字节序。 更多...
bool | native_little_bit_order ()
| 测试本机位序。 更多...
bool | is_power_of_2 (std::uintmax_t n)
| 判断无符号整数是否为 2 的整数次幂。 更多...
bool | is_power_of_2_positive (std::uintmax_t n)
| 判断无符号整数是否为 2 的整数次幂的正整数。 更多...
size_t | floor_lb (std::uintmax_t n)
| 计算 2 为底数的无符号整数的向下取整的对数值。 更多...
size_t | ceiling_lb (std::uintmax_t n)
| 计算 2 为底数的无符号整数向上取整的的对数值。 更多...
template<size_t _vWidth, typename _tIn >
make_width_int< _vWidth >::unsigned_type | pack_uint (_tIn first, _tIn last)
| 使用迭代器对指定的范围中的字节表示的序列构造无符号整数。 更多...
template<size_t _vWidth, typename _tOut >
void | unpack_uint (typename ystdex::make_width_int< _vWidth >::unsigned_type value, _tOut result)
| 分解无符号整数到迭代器对指定的字节范围。 更多...
template<size_t _vWidth>
make_width_int< _vWidth >::unsigned_type | read_uint_be (const byte *buf)
| 从字节缓冲区读取指定宽的大端序无符号整数。 更多...
template<size_t _vWidth>
make_width_int< _vWidth >::unsigned_type | read_uint_le (const byte *buf)
| 从字节缓冲区读取指定宽的小端序无符号整数。 更多...
template<size_t _vWidth>
void | write_uint_be (byte *buf, typename make_width_int< _vWidth >::unsigned_type val)
| 向字节缓冲区写入指定宽的大端序无符号整数。 更多...
template<size_t _vWidth>
void | write_uint_le (byte *buf, typename make_width_int< _vWidth >::unsigned_type val)
| 向字节缓冲区写入指定宽的小端序无符号整数。 更多...
size_t | vfmtlen (const char *, std::va_list)
| 计算指定格式字符串输出的占用的字节数。 更多...
size_t | vfmtlen (const wchar_t *, std::va_list)
bool | setnbuf (std::FILE *stream)
| 关闭流缓冲。 更多...
bool | fexists (const char *)
| 判断指定路径的文件是否存在。 更多...
template<typename _func >
static void | read_all_with_buffer (std::FILE *fp, char *p_buf, size_t len, _func append)
| 使用指定缓冲区和缓冲区处理函数从流中顺序读取所有内容。 更多...
const char * | openmode_conv (std::ios_base::openmode)
| ISO C/C++ 标准输入输出接口打开模式转换。 更多...
std::ios_base::openmode | openmode_conv (const char *)
| ISO C/C++ 标准输入输出接口打开模式转换。 更多...
size_t | strlen_n (const char *s)
| 带空指针检查的字符串长度计算。 更多...
char * | strcpy_n (char *d, const char *s)
| 带空指针检查的字符串复制。 更多...
char * | strcpycat (char *, const char *, const char *)
| 带空指针检查的字符串连接。 更多...
char * | strcatdup (const char *, const char *, void *(*)(size_t)=std::malloc)
| 带空指针检查的字符串连接复制。 更多...
template<typename _tChar >
bool | is_null (_tChar c)
| 使用 `std::char_traits::eq` 判断是否为空字符。 更多...
template<typename _tChar >
int | ntctscmp (const _tChar *s1, const _tChar *s2)
| 按字典序比较简单 NTCTS 。 更多...
int | ntctscmp (const char *s1, const char *s2)
int | ntctscmp (const wchar_t *s1, const wchar_t *s2)
int | ntctscmp (const uchar_t *s1, const uchar_t *s2)
template<typename _tChar >
int | ntctscmp (const _tChar *s1, const _tChar *s2, size_t n)
template<typename _tChar >
int | ntctscmp (const _tChar *s1, const _tChar *s2, size_t n1, size_t n2)
template<typename _tChar >
int | ntctsicmp (const _tChar *s1, const _tChar *s2)
| 按字典序比较简单 NTCTS （忽略大小写）。 更多...
template<typename _tChar >
int | ntctsicmp (const _tChar *s1, const _tChar *s2, size_t n)
| 按字典序比较不超过指定长度的简单 NTCTS （忽略大小写）。 更多...
template<typename _tChar >
enable_if_irreplaceable_char_t< _tChar, _tChar * > | ntctscpy (_tChar *s1, const _tChar *s2)
| 复制 NTCTS 。 更多...
char * | ntctscpy (char *s1, const char *s2)
wchar_t * | ntctscpy (wchar_t *s1, const wchar_t *s2)
wchar_t * | ntctscpy (uchar_t *s1, const uchar_t *s2)
template<typename _tChar , typename = enable_if_replaceable_t<_tChar, char>>
_tChar * | ntctscpy (_tChar *s1, const _tChar *s2)
template<typename _tChar >
enable_if_replaceable_t< _tChar, wchar_t, _tChar * > | ntctscpy (_tChar *s1, const _tChar *s2)
template<typename _tChar >
_tChar * | ntctscpy (_tChar *s1, const _tChar *s2, size_t n)
| 复制确定源长度的 NTCTS 。 更多...
template<typename _tChar >
enable_if_irreplaceable_char_t< _tChar, _tChar * > | ntctsncpy (_tChar *s1, const _tChar *s2, size_t n)
| 复制不超过指定长度的 NTCTS 。 更多...
char * | ntctsncpy (char *s1, const char *s2, size_t n)
wchar_t * | ntctsncpy (wchar_t *s1, const wchar_t *s2, size_t n)
wchar_t * | ntctsncpy (uchar_t *s1, const uchar_t *s2, size_t n)
template<typename _tChar , typename = enable_if_replaceable_t<_tChar, char>>
_tChar * | ntctsncpy (_tChar *s1, const _tChar *s2, size_t n)
template<typename _tChar >
enable_if_replaceable_t< _tChar, wchar_t, _tChar * > | ntctsncpy (_tChar *s1, const _tChar *s2, size_t n)
template<typename _tChar >
_tChar * | ntctsmove (_tChar *s1, const _tChar *s2, size_t n)
| 转移 NTCTS 。 更多...
template<typename _tChar >
_tChar * | ntctschr (_tChar *s, remove_const_t< _tChar > c)
| 在简单 NTCTS 内查找字符。 更多...
char * | ntctschr (char *s, char c)
const char * | ntctschr (const char *s, char c)
wchar_t * | ntctschr (wchar_t *s, wchar_t c)
const wchar_t * | ntctschr (const wchar_t *s, wchar_t c)
uchar_t * | ntctschr (uchar_t *s, uchar_t c)
const uchar_t * | ntctschr (const uchar_t *s, uchar_t c)
template<typename _tChar >
size_t | ntctsfind (const _tChar *s, size_t n, _tChar c)
| 在简单 NTCTS 的指定前若干字符内查找字符。 更多...
template<typename _tChar >
size_t | ntctslen (const _tChar *s)
| 计算简单 NTCTS 长度。 更多...
template<typename _tChar >
size_t | ntctslen (const _tChar *s, size_t n)
| 计算不超过指定长度的简单 NTCTS 长度。 更多...
template<typename _tChar >
size_t | const_ntctslen (const _tChar *s)
| 计算简单 NTCTS 长度。 更多...
template<typename _tChar >
size_t | const_ntctscnt (const _tChar *s, _tChar c)
| 计算简单 NTCTS 中的指定字符数。 更多...
template<typename _tChar >
std::char_traits< _tChar >::int_type | const_ntctscmp (const _tChar *s1, const _tChar *s2)
| 比较简单 NTCTS 。 更多...
template<typename _tChar >
std::char_traits< _tChar >::int_type | const_ntctscmp (const _tChar *s1, const _tChar *s2, size_t n)
| 比较不超过指定长度的简单 NTCTS 。 更多...
template<typename _tChar >
size_t | const_ntctsfind (const _tChar *s, _tChar c)
| 在简单 NTCTS 中顺序查找指定字符。 更多...
template<typename _tChar >
size_t | const_ntctsfind (const _tChar *s, _tChar c, size_t n)
| 在简单 NTCTS 中顺序查找第指定次数出现的指定字符。 更多...
template<typename _tChar >
size_t | const_ntctsfind (const _tChar *s1, const _tChar *s2)
| 在简单 NTCTS 中顺序查找作为子串的指定 NTCTS 。 更多...
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find (const _tChar *p, _tSize sz, _tChar c, _tSize pos)
| 查找字符或子串。 更多...
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_rfind (const _tChar *p, _tSize sz, _tChar c, _tSize pos)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_rfind (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_first_of (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_last_of (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_first_not_of (const _tChar *p, _tSize sz, _tChar c, _tSize pos)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_first_not_of (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_last_not_of (const _tChar *p, _tSize sz, _tChar c, _tSize pos)
template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>
_tSize | str_find_last_not_of (const _tChar *p, _tSize sz, const _tChar *s, _tSize pos, _tSize n)
bool | is_date_range_valid (const std::tm &t)
| 判断 std::tm 的日期数据成员范围是否有效。 更多...
bool | is_time_no_leap_valid (const std::tm &t)
| 判断 std::tm 的时间数据成员范围是否有效。 更多...
bool | iswprint (wchar_t)
| 区域无关的 std::isprint 实现。 更多...
bool | iswspace (wchar_t)
| 区域无关的 std::iswspace 实现。 更多...
bool | iswgraph (wchar_t wc)
| 区域无关的 std::iswgraph 实现。 更多...
template<typename _tIter >
bool | is_undereferenceable (const _tIter &)
template<typename _type >
bool | is_undereferenceable (_type *p)
template<typename _type >
auto | nonnull_or (_type &&p) -> decay_t< decltype(std::forward< decltype(p)>(p))>
| 取非空引用或默认值。 更多...
template<typename _tOther , typename _type >
auto | nonnull_or (_type &&p, _tOther &&other) -> decltype(p ? std::forward< decltype(p)>(p) :std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _tSentinal = nullptr_t>
auto | nonnull_or (_type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last)) ? std::forward< decltype(p)>(p) :std::forward< decltype(other)>(other))
template<typename _type , typename _func >
auto | call_nonnull_or (_func f, _type &&p) -> decay_t< decltype(f(std::forward< decltype(p)>(p)))>
| 调用非引用或默认值。 更多...
template<typename _tOther , typename _type , typename _func >
auto | call_nonnull_or (_func f, _type &&p, _tOther &&other) -> decltype(p ? f(std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>
auto | call_nonnull_or (_func f, _type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last)) ? f(std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _type >
auto | value_or (_type &&p) -> decay_t< decltype(*std::forward< decltype(p)>(p))>
| 取非空值或默认值。 更多...
template<typename _tOther , typename _type >
auto | value_or (_type &&p, _tOther &&other) -> decltype(p ? *std::forward< decltype(p)>(p) :std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _tSentinal = nullptr_t>
auto | value_or (_type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last)) ? *std::forward< decltype(p)>(p) :std::forward< decltype(other)>(other))
template<typename _type , typename _func >
auto | call_value_or (_func f, _type &&p) -> decay_t< decltype(f(*std::forward< decltype(p)>(p)))>
| 调用非空值或取默认值。 更多...
template<typename _tOther , typename _type , typename _func >
auto | call_value_or (_func f, _type &&p, _tOther &&other) -> decltype(p ? f(*std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>
auto | call_value_or (_func f, _type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last)) ? f(*std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _type >
enable_if_t< is_enum_union< _type >::value, wrapped_enum_traits_t< _type > > | underlying (_type val)
template<typename _func >
void | iterate_exceptions (_func &&f, std::exception_ptr p=std::current_exception())
| 迭代处理异常。 更多...
template<class _tEx >
std::exception_ptr | get_nested_exception_ptr (const _tEx &e)
| 取嵌套异常指针。 更多...
template<typename _type >
void | raise_exception (_type &&e)
| 引发异常：若当前存在正在处理的异常则抛出嵌套异常，否则抛出异常。 更多...
template<typename _tEx , typename _func , typename _tExCaught = remove_cv_t<_tEx>&>
void | handle_nested (_tEx &e, _func &&f)
| 处理嵌套异常。 更多...
template<class _type = std::system_error, typename... _tParams>
void | throw_error (std::error_code ec, _tParams &&... args)
| 抛出错误： std::system_error 或允许相同构造函数参数的异常。 更多...
template<class _type = std::system_error, typename... _tParams>
void | throw_error (std::error_condition cond, _tParams &&... args)
template<class _type = std::system_error, typename... _tParams>
void | throw_error (int ev, _tParams &&... args)
template<class _type = std::system_error, typename... _tParams>
void | throw_error (int ev, const std::error_category &ecat, _tParams &&... args)
template<typename... _tParams>
size_t | sizeof_params (_tParams &&...)
| 统计函数参数列表中的参数个数。 更多...
template<size_t _vN, typename... _tParams>
auto | varg (_tParams &&... args) -> decltype(variadic_param< _vN >::get(std::forward< decltype(args)>(args)...))
| 取指定位置的变长参数。 更多...
template<typename _func >
void | chain_apply (_func &&f)
| 顺序链式调用。 更多...
template<typename _func , typename _type , typename... _tParams>
void | chain_apply (_func &&f, _type &&arg, _tParams &&... args)
template<typename _func >
void | seq_apply (_func &&)
| 顺序递归调用。 更多...
template<typename _func , typename _type , typename... _tParams>
void | seq_apply (_func &&f, _type &&arg, _tParams &&... args)
template<typename _func , typename... _tParams>
void | unseq_apply (_func &&f, _tParams &&... args)
| 无序调用。 更多...
template<typename _fSig >
static bool | function_not_empty (const std::function< _fSig > &f)
| 判断是否符合 std::function 实现初始化为空函数对象的条件。 更多...
template<class _tTraits , typename _fSig >
static bool | function_not_empty (const function_base< _tTraits, _fSig > &f)
template<typename _func , typename = enable_if_t<is_function<_func>::value>>
static bool | function_not_empty (_func *p)
template<typename _tRet , class _tClass >
static bool | function_not_empty (_tRet _tClass::*p)
template<typename _type >
static bool | function_not_empty (const _type &)
template<typename _func , typename... _tParams>
auto | bind1 (_func &&f, _tParams &&... args) -> decltype(std::bind(std::forward< decltype(f)>(f), std::placeholders::_1, std::forward< decltype(args)>(args)...))
| 复合调用 std::bind 和 std::placeholders::_1 。 更多...
template<typename _tRes , typename _func , typename... _tParams>
auto | bind1 (_func &&f, _tParams &&... args) -> decltype(std::bind< _tRes >(std::forward< decltype(f)>(f), std::placeholders::_1, std::forward< decltype(args)>(args)...))
template<typename _func , typename _func2 , typename... _tParams>
auto | bind_forward (_func &&f, _func2 &&f2, _tParams &&... args) -> decltype(ystdex::bind1(std::forward< decltype(f)>(f), std::bind(std::forward< decltype(f2)>(f2), std::placeholders::_2, std::forward< decltype(args)>(args)...)))
| 复合调用 ystdex::bind1 和 std::placeholders::_2 以实现值的设置。 更多...
template<typename _func , typename _func2 , typename _func3 , typename... _funcs>
auto | compose (_func f, _func2 g, _func3 h, _funcs... args) -> decltype(ystdex::compose(ystdex::compose(f, g), h, args...))
template<typename _func , typename _func2 , typename _func3 , typename... _funcs>
auto | compose_n (_func f, _func2 g, _func3 h, _funcs... args) -> decltype(ystdex::compose_n(ystdex::compose_n(f, g), h, args...))
template<class _tThunk , typename _func >
void | update_thunk (_tThunk &thunk, _func &&f)
| 更新间接调用对象。 更多...
template<typename _type , typename _fCallable , typename... _tParams>
auto | invoke_for_value (_type &&val, _fCallable &&f, _tParams &&... args) -> common_nonvoid_t< invoke_result_t< _fCallable, _tParams... >, _type >
| 调用第二参数起指定的函数对象，若返回空类型则使用第一参数的值为返回值。 更多...
template<typename _fCond , typename _fCallable , typename... _tParams>
invoke_result_t< _fCallable, _tParams... > | retry_on_cond (_fCond cond, _fCallable &&f, _tParams &&... args)
| 循环重复调用：代替直接使用 do-while 语句以避免过多引入作用域外的变量。 更多...
template<bool _bIsPositive, typename _tScalar >
_tScalar & | xcrease (_tScalar &_x)
| 选择自增/自减运算。 更多...
template<bool _bIsPositive, typename _tScalar1 , typename _tScalar2 >
_tScalar1 & | delta_assign (_tScalar1 &_x, _tScalar2 &_y)
| 选择加法/减法复合赋值运算。 更多...
template<typename _type >
std::future< decay_t< _type > > | make_ready_future (_type &&val)
std::future< void > | make_ready_future ()
template<typename _type >
std::future< _type > | make_ready_future (std::exception_ptr p)
template<typename _fCallable , typename... _tParams>
packed_task_t< _fCallable &&, _tParams &&... > | pack_task (_fCallable &&f, _tParams &&... args)
template<typename _fCallable , typename... _tParams>
std::shared_ptr< packed_task_t< _fCallable &&, _tParams &&... > > | pack_shared_task (_fCallable &&f, _tParams &&... args)
template<typename _type >
void | hash_combine (size_t &seed, const _type &val)
| 重复计算散列。 更多...
template<typename _type >
size_t | hash_combine_seq (size_t seed, const _type &val)
| 重复计算序列散列。 更多...
template<typename _type , typename... _tParams>
size_t | hash_combine_seq (size_t seed, const _type &val, const _tParams &... args)
template<typename _tIn >
size_t | hash_range (size_t seed, _tIn first, _tIn last)
| 重复对范围计算散列。 更多...
template<typename _tIn >
size_t | hash_range (_tIn first, _tIn last)
template<typename _fCallable , typename... _tParams>
invoke_result_t< _fCallable, _tParams... > | invoke (_fCallable &&f, _tParams &&... args)
| 调用可调用对象。 更多...
template<typename _fCallable , typename... _tParams>
nonvoid_result_t< invoke_result_t< _fCallable, _tParams... > > | invoke_nonvoid (_fCallable &&f, _tParams &&... args)
| 调用可调用对象，保证返回值非空。 更多...
template<typename _type , typename _func >
auto | invoke_value_or (_func f, _type &&p) -> decay_t< decltype(ystdex::invoke(f, *std::forward< decltype(p)>(p)))>
| 使用 invoke 调用非空值或取默认值。 更多...
template<typename _tOther , typename _type , typename _func >
auto | invoke_value_or (_func f, _type &&p, _tOther &&other) -> decltype(p ? ystdex::invoke(f, *std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>
auto | invoke_value_or (_func f, _type &&p, _tOther &&other, _tSentinal &&last) -> decltype(!bool(p==std::forward< decltype(last)>(last)) ? ystdex::invoke(f, *std::forward< decltype(p)>(p)) :std::forward< decltype(other)>(other))
template<typename _tChar , class _tTraits >
void | setstate (std::basic_ios< _tChar, _tTraits > &ios, std::ios_base::iostate state)
| 设置流状态。 更多...
template<typename _tChar , class _tTraits >
void | rethrow_badstate (std::basic_ios< _tChar, _tTraits > &ios, std::ios_base::iostate state=std::ios_base::badbit)
| 设置流状态并重新抛出当前异常。 更多...
template<typename _type , typename _tChar , class _tTraits >
bool | stream_equal (std::basic_istream< _tChar, _tTraits > &a, std::basic_istream< _tChar, _tTraits > &b)
| 比较指定流的内容相等。 更多...
template<typename _tIter >
auto | operator| (_tIter &&i, first_tag) -> decltype(make_transform(std::forward< decltype(i)>(i), iterator_transformation::first<>()))
| 管道匹配操作符。 更多...
template<typename _tIter >
auto | operator| (_tIter &&i, second_tag) -> decltype(make_transform(std::forward< decltype(i)>(i), iterator_transformation::second<>()))
template<typename _tIter >
auto | operator| (_tIter &&i, get_indirect_t) -> decltype(make_transform(std::forward< decltype(i)>(i), iterator_transformation::indirect<>()))
template<typename _tIter >
auto | operator| (_tIter &&i, get_get_t) -> decltype(make_transform(std::forward< decltype(i)>(i), iterator_transformation::get<>()))
template<typename _tIter , typename _tSize = make_unsigned_t< typename std::iterator_traits<decay_t<_tIter>>::difference_type>, typename _tIndex = _tSize>
transposed_iterator< decay_t< _tIter > > | make_transposed (_tIter &&i, _tSize w, _tSize h, _tIndex idx)
template<typename _tIn , typename _fPred >
_tIn | next_if (_tIn i, _fPred f, typename std::iterator_traits< _tIn >::difference_type n=1)
| 迭代器指向的值满足条件时取邻接迭代器，否则取原值。 更多...
template<typename _tIn , typename _type >
_tIn | next_if_eq (_tIn i, const _type &val, typename std::iterator_traits< _tIn >::difference_type n=1)
template<typename _tBi , typename _fPred >
_tBi | prev_if (_tBi i, _fPred f, typename std::iterator_traits< _tBi >::difference_type n=1)
| 迭代器指向的值满足条件时取反向邻接迭代器，否则取原值。 更多...
template<typename _tBi , typename _type >
_tBi | prev_if_eq (_tBi i, const _type &val, typename std::iterator_traits< _tBi >::difference_type n=1)
template<typename _tIter >
reverse_iterator< _tIter > | make_reverse_iterator (_tIter i)
| 构造反向迭代器。 更多...
template<typename _tIter , typename _tRet = cond_t<is_throwing_move_copyable< typename std::iterator_traits<_tIter>::value_type>, _tIter, std::move_iterator<_tIter>>>
_tRet | make_move_if_noexcept_iterator (_tIter it)
| 按 std::move_if_noexcept 的条件构造转移迭代器或非转移迭代器。 更多...
template<typename _tIter1 , typename _tIter2 >
auto | make_move_iterator_pair (_tIter1 it1, _tIter2 it2) -> decltype(std::make_pair(std::make_move_iterator(it1), std::make_move_iterator(it2)))
| 构造转移迭代器对。 更多...
template<typename _tRange >
auto | make_move_iterator_pair (_tRange &c) -> decltype(ystdex::make_move_iterator_pair(c.begin(), c.end()))
| 构造指定序列范围（包含序列容器及内建数组等）的转移迭代器对。 更多...
template<typename _type , typename... _tParams>
_type | create_or_throw (_tParams &&... args)
| 调用构造函数创建对象或抛出异常。 更多...
template<typename _type , class _tAlloc , typename... _tParams>
_type * | create_or_throw_with_allocator (_tAlloc &&a, _tParams &&... args)
| 调用 ystdex::create_with_allocator 表达式创建对象或抛出异常。 更多...
template<typename _type , typename... _tParams>
_type * | new_or_throw (_tParams &&... args)
| 调用 new 表达式创建对象或抛出异常。 更多...
template<typename _type , typename _fDeleter >
bool | is_undereferenceable (const std::unique_ptr< _type, _fDeleter > &p)
| 判断智能指针实例是否不可解引用。 更多...
template<typename _type >
bool | is_undereferenceable (const std::shared_ptr< _type > &p)
template<typename _type >
bool | is_undereferenceable (const std::weak_ptr< _type > &p)
template<typename _type >
_type * | get_raw (_type *const &p)
template<typename _type , typename _fDeleter >
auto | get_raw (const std::unique_ptr< _type, _fDeleter > &p) -> decltype(p.get())
template<typename _type >
_type * | get_raw (const std::shared_ptr< _type > &p)
template<typename _type >
_type * | get_raw (const std::weak_ptr< _type > &p)
template<typename _type >
bool | owns_any (_type *const &)
template<typename _type , typename _fDeleter >
bool | owns_any (const std::unique_ptr< _type, _fDeleter > &p)
template<typename _type >
bool | owns_any (const std::shared_ptr< _type > &p)
template<typename _type >
bool | owns_any (const std::weak_ptr< _type > &p)
template<typename _type >
bool | owns_nonnull (_type *const &)
template<typename _type , typename _fDeleter >
bool | owns_nonnull (const std::unique_ptr< _type, _fDeleter > &p)
template<typename _type >
bool | owns_nonnull (const std::shared_ptr< _type > &p)
template<typename _type >
bool | owns_nonnull (const std::weak_ptr< _type > &p)
template<typename _type >
bool | owns_unique (const _type &)
template<typename _type , class _tDeleter >
bool | owns_unique (const std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | owns_unique (const std::shared_ptr< _type > &p)
template<typename _type >
bool | owns_unique (const std::weak_ptr< _type > &p)
template<typename _type >
bool | owns_unique_nonnull (const _type &)
template<typename _type , class _tDeleter >
bool | owns_unique_nonnull (const std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | owns_unique_nonnull (const std::shared_ptr< _type > &p)
template<typename _type >
bool | owns_unique_nonnull (const std::weak_ptr< _type > &p)
template<typename _type , class _tDeleter >
bool | reset (std::unique_ptr< _type, _tDeleter > &p)
template<typename _type >
bool | reset (std::shared_ptr< _type > &p)
template<typename _type , typename _pSrc >
std::unique_ptr< _type > | unique_raw (_pSrc *p)
template<typename _type >
std::unique_ptr< _type > | unique_raw (_type *p)
template<typename _type , typename _tDeleter , typename _pSrc >
std::unique_ptr< _type, _tDeleter > | unique_raw (_pSrc *p, _tDeleter &&d)
template<typename _type , typename _tDeleter >
std::unique_ptr< _type, _tDeleter > | unique_raw (_type *p, _tDeleter &&d)
template<typename _type >
std::unique_ptr< _type > | unique_raw (nullptr_t)
template<typename _type , typename... _tParams>
std::shared_ptr< _type > | share_raw (_type *p, _tParams &&... args)
template<typename _type , typename _pSrc , typename... _tParams>
std::shared_ptr< _type > | share_raw (_pSrc &&p, _tParams &&... args)
template<typename _type >
std::shared_ptr< _type > | share_raw (nullptr_t)
template<typename _type , class... _tParams>
enable_if_t< sizeof...(_tParams) !=0, std::shared_ptr< _type > > | share_raw (nullptr_t, _tParams &&... args)
template<typename _type , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type > > | make_unique (_tParams &&... args)
template<typename _type , typename... _tParams>
enable_if_t< is_array< _type >::value &&extent< _type >::value==0, std::unique_ptr< _type > > | make_unique (size_t size)
template<typename _type , typename... _tParams>
enable_if_t< extent< _type >::value !=0 > | make_unique (_tParams &&...)=delete
template<typename _type , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type > > | make_unique_default_init ()
template<typename _type , typename... _tParams>
enable_if_t< is_array< _type >::value &&extent< _type >::value==0, std::unique_ptr< _type > > | make_unique_default_init (size_t size)
template<typename _type , typename... _tParams>
enable_if_t< extent< _type >::value !=0 > | make_unique_default_init (_tParams &&...)=delete
template<typename _type , typename _tElem >
std::unique_ptr< _type > | make_unique (std::initializer_list< _tElem > il)
| 使用指定类型的初始化列表构造指定类型的 std::unique_ptr 对象。 更多...
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t<!is_array< _type >::value, std::unique_ptr< _type, _tDeleter > > | make_unique_with (_tDeleter &&d, _tParams &&... args)
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t< is_array< _type >) &&extent< _type >)==0, std::unique_ptr< _type > > | make_unique_with (_tDeleter &&d, size_t size)
template<typename _type , typename _tDeleter , typename... _tParams>
enable_if_t< is_array< _type >) &&extent< _type >) !=0 > | make_unique_with (_tDeleter &&, _tParams &&...)=delete
template<typename _type , typename _tValue >
std::shared_ptr< _type > | make_shared (std::initializer_list< _tValue > il)
| 使用指定类型的初始化列表构造指定类型的 std::shared_ptr 对象。 更多...
template<typename _type >
std::weak_ptr< _type > | make_weak (const std::shared_ptr< _type > &p)
| 使用指定的 std::shared_ptr 实例的对象创建对应的 std::weak_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_copy (const _tValue &v)
| 复制值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_copy (std::initializer_list< _tValue > il)
| 复制初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_copy (const _tAlloc &a, const _tValue &v)
| 复制初始化值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_copy (const _tAlloc &a, std::initializer_list< _tValue > il)
| 复制初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_forward (_tValue &&v)
| 传递值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_forward (std::initializer_list< _tValue > il)
| 传递初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_forward (const _tAlloc &a, _tValue &&v)
| 传递值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_forward (const _tAlloc &a, std::initializer_list< _tValue > il)
| 传递初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_move (_tValue &&v)
| 转移值创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_move (std::initializer_list< _tValue > il)
| 转移初始化列表创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_move (const _tAlloc &a, _tValue &&v)
| 转移值以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::shared_ptr< decay_t< _type > > | share_move (const _tAlloc &a, std::initializer_list< _tValue > il)
| 转移初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_copy (const _tValue &v)
| 复制值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_copy (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_copy (const _tAlloc &a, const _tValue &v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_copy (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_forward (_tValue &&v)
| 传递值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_forward (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_forward (const _tAlloc &a, _tValue &&v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_forward (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_move (_tValue &&v)
| 转移值创建对应的 std::unique_ptr 实例的对象。 更多...
template<typename _tValue , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_move (std::initializer_list< _tValue > il)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_move (const _tAlloc &a, _tValue &&v)
template<typename _tValue , class _tAlloc , typename _type = _tValue>
std::unique_ptr< decay_t< _type > > | unique_move (const _tAlloc &a, std::initializer_list< _tValue > il)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | static_pointer_cast (std::unique_ptr< _type > p)
| 智能指针转换。 更多...
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | static_pointer_cast (std::unique_ptr< _type, _tDeleter > p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | dynamic_pointer_cast (std::unique_ptr< _type > &p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | dynamic_pointer_cast (std::unique_ptr< _type > &&p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | dynamic_pointer_cast (std::unique_ptr< _type, _tDeleter > &p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | dynamic_pointer_cast (std::unique_ptr< _type, _tDeleter > &&p)
template<typename _tDst , typename _type >
std::unique_ptr< _tDst > | const_pointer_cast (std::unique_ptr< _type > p)
template<typename _tDst , typename _type , typename _tDeleter >
std::unique_ptr< _tDst, _tDeleter > | const_pointer_cast (std::unique_ptr< _type, _tDeleter > p)
template<typename _type >
_type * | clone_monomorphic (const _type &v)
| 使用 new 复制对象。 更多...
template<typename _type , class _tAlloc >
auto | clone_monomorphic (const _type &v, _tAlloc &&a) -> decltype(ystdex::create_with_allocator< _type >(std::forward< decltype(a)>(a), v))
| 使用分配器复制对象。 更多...
template<typename _tPointer >
auto | clone_monomorphic_ptr (const _tPointer &p) -> decltype(ystdex::clone_monomorphic(*p))
| 若指针非空，使用 new 复制指针指向的对象。 更多...
template<typename _tPointer , class _tAlloc >
auto | clone_monomorphic_ptr (const _tPointer &p, _tAlloc &&a) -> decltype(ystdex::clone_monomorphic(*p, std::forward< decltype(a)>(a)))
| 若指针非空，使用分配器复制指针指向的对象。 更多...
template<class _type >
auto | clone_polymorphic (const _type &v) -> decltype(v.clone())
| 使用 `clone` 成员函数复制多态类类型对象。 更多...
template<class _tPointer >
auto | clone_polymorphic_ptr (const _tPointer &p) -> decltype(clone_polymorphic(*p))
| 若指针非空，使用 `clone` 成员函数复制指针指向的多态类类型对象。 更多...
template<typename _type , typename... _tParams>
auto | pack_object (_tParams &&... args) -> decltype(details::pack_obj_impl< _type >::pack(std::forward< decltype(args)>(args)...))
| 打包对象：通过指定参数构造对象。 更多...
template<typename _type , typename _tOther >
auto | operator!= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() !=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator< (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >()< std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator> (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() > std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator<= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >()<=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator>= (const optional< _type > &x, const optional< _tOther > &y) -> optional_relop_t< decltype(std::declval< _type >() >=std::declval< _tOther >())>
template<typename _type >
bool | operator== (const optional< _type > &x, nullopt_t)
template<typename _type >
bool | operator< (const optional< _type > &, nullopt_t)
template<typename _type >
bool | operator< (nullopt_t, const optional< _type > &y)
template<typename _type , typename _tOther >
auto | operator== (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()==std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator== (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()==std::declval< _type >())>
template<typename _type , typename _tOther >
auto | operator!= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() !=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator!= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() !=std::declval< _type >())>
template<typename _type , typename _tOther >
auto | operator< (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()< std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator< (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()< std::declval< _type >())>
template<typename _type , typename _tOther >
auto | operator> (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() > std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator> (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() > std::declval< _type >())>
template<typename _type , typename _tOther >
auto | operator<= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >()<=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator<= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >()<=std::declval< _type >())>
template<typename _type , typename _tOther >
auto | operator>= (const optional< _type > &x, const _tOther &y) -> optional_relop_t< decltype(std::declval< _type >() >=std::declval< _tOther >())>
template<typename _type , typename _tOther >
auto | operator>= (const _tOther &x, const optional< _type > &y) -> optional_relop_t< decltype(std::declval< _tOther >() >=std::declval< _type >())>
template<typename _type >
void | swap (optional< _type > &x, optional< _type > &y)
template<typename _type , typename... _tParams>
optional< _type > | make_optional (_tParams &&... args)
| 创建 optional 对象。 更多...
template<typename _type , typename _tOther , typename... _tParams>
optional< _type > | make_optional (std::initializer_list< _tOther > il, _tParams &&... args)
template<typename _type , typename... _tParams>
optional< _type > | make_optional_inplace (_tParams &&... args)
| 使用指定参数构造指定 optional 实例的值。 更多...
template<typename _type >
_type & | ref_opt (optional< _type > &&o)
| 从 optional 实例的临时对象取左值引用。 更多...
template<typename _type >
_type & | ref_opt ()
template<class _tSeqCon , class _tTraits >
_tSeqCon::value_type | to_string (const path< _tSeqCon, _tTraits > &pth, const typename _tSeqCon::value_type &seperator=&to_array< typename string_traits< typename _tSeqCon::value_type >::value_type >("/")[0])
| 取字符串表示。 更多...
template<class _tSeqCon , class _tTraits >
_tSeqCon::value_type | to_string_d (const path< _tSeqCon, _tTraits > &pth, typename string_traits< typename _tSeqCon::value_type >::value_type delimiter='/')
| 取以分隔符结束的字符串表示。 更多...
template<typename _type >
bool | is_aligned_ptr (_type *p, size_t alignment=std::alignment_of< cond_t< is_void< _type > >::value std::max_align_t, _type >))
| 返回参数指定的指针值对齐到指定的对齐值。 更多...
template<typename _type , typename _tObj >
_type * | construct_default_within (_tObj &obj)
| 以默认初始化在对象中构造。 更多...
template<typename _type , typename _tObj , typename... _tParams>
_type * | construct_within (_tObj &obj, _tParams &&... args)
| 以值初始化在对象中构造。 更多...
template<typename _type >
void | construct_default_in (_type &obj)
| 以默认初始化原地构造。 更多...
template<typename _type , typename... _tParams>
void | construct_in (_type &obj, _tParams &&... args)
| 以值初始化原地构造。 更多...
template<typename _tIter , typename... _tParams>
void | construct (_tIter i, _tParams &&... args)
| 使用指定参数在迭代器指定的位置以指定参数初始化构造对象。 更多...
template<typename _tIter >
void | construct_default (_tIter i)
| 使用指定参数在迭代器指定的位置以默认初始化构造对象。 更多...
template<typename _tIter , typename... _tParams>
void | construct_range (_tIter first, _tIter last, _tParams &&... args)
| 使用指定的参数重复构造迭代器范围内的对象序列。 更多...
template<typename _type >
void | destroy_at (_type *location)
| 原地销毁。 更多...
template<typename _tFwd >
void | destroy (_tFwd first, _tFwd last)
template<typename _tFwd , typename _tSize >
_tFwd | destroy_n (_tFwd first, _tSize n)
template<typename _type >
void | destruct_in (_type &obj)
| 原地析构。 更多...
template<typename _tIter >
void | destruct (_tIter i)
| 析构迭代器指向的对象。 更多...
template<typename _tIter >
void | destruct_range (_tIter first, _tIter last)
| 析构d迭代器范围内的对象序列。 更多...
template<typename _tFwd >
void | uninitialized_default_construct (_tFwd first, _tFwd last)
template<typename _tFwd , typename _tSize >
_tFwd | uninitialized_default_construct_n (_tFwd first, _tSize n)
template<typename _tFwd >
void | uninitialized_value_construct (_tFwd first, _tFwd last)
template<typename _tFwd , typename _tSize >
_tFwd | uninitialized_value_construct_n (_tFwd first, _tSize n)
template<typename _tIn , class _tFwd >
_tFwd | uninitialized_move (_tIn first, _tIn last, _tFwd result)
| 转移初始化范围。 更多...
template<typename _tIn , typename _tSize , class _tFwd >
std::pair< _tIn, _tFwd > | uninitialized_move_n (_tIn first, _tSize n, _tFwd result)
template<typename _tFwd , typename... _tParams>
void | uninitialized_construct (_tFwd first, _tFwd last, _tParams &&... args)
| 在迭代器指定的未初始化的范围上构造对象。 更多...
template<typename _tFwd , typename _tSize , typename... _tParams>
void | uninitialized_construct_n (_tFwd first, _tSize n, _tParams &&... args)
template<class _tPointer >
auto | to_address (const _tPointer &p) -> decltype(details::to_address(p))
| 转换指针。 更多...
template<typename _type >
_type * | to_address (_type *p)
template<typename _type1 , typename _type2 >
bool | operator!= (observer_ptr< _type1 > p1, observer_ptr< _type2 > p2)
template<typename _type1 , typename _type2 >
bool | operator< (observer_ptr< _type1 > p1, observer_ptr< _type2 > p2)
template<typename _type >
void | swap (observer_ptr< _type > &p1, observer_ptr< _type > &p2)
template<typename _type >
observer_ptr< _type > | make_observer (_type *p)
template<class _tRange >
auto | begin (_tRange &c) -> decltype(c.begin())
template<class _tRange >
auto | begin (const _tRange &c) -> decltype(c.begin())
template<typename _type , size_t _vN>
_type * | begin (_type(&array)[_vN])
template<class _tRange >
auto | end (_tRange &c) -> decltype(c.end())
template<class _tRange >
auto | end (const _tRange &c) -> decltype(c.end())
template<typename _type , size_t _vN>
_type * | end (_type(&array)[_vN])
template<typename _type , size_t _vN>
_type * | begin (_type(&&array)[_vN])
template<typename _type , size_t _vN>
_type * | end (_type(&&array)[_vN])
template<typename _type , size_t _vN>
reverse_iterator< _type * > | rbegin (_type(&&array)[_vN])
template<typename _type , size_t _vN>
reverse_iterator< _type * > | rend (_type(&&array)[_vN])
template<typename _tRange >
auto | cbegin (const _tRange &c) -> decltype(ystdex::begin(c))
template<typename _tRange >
auto | cend (const _tRange &c) -> decltype(ystdex::end(c))
template<class _tRange >
auto | rbegin (_tRange &c) -> decltype(c.rbegin())
template<class _tRange >
auto | rbegin (const _tRange &c) -> decltype(c.rbegin())
template<typename _type , size_t _vN>
reverse_iterator< _type * > | rbegin (_type(&array)[_vN])
template<typename _tElem >
reverse_iterator< const _tElem * > | rbegin (std::initializer_list< _tElem > il)
template<class _tRange >
auto | rend (_tRange &c) -> decltype(c.rend())
template<class _tRange >
auto | rend (const _tRange &c) -> decltype(c.rend())
template<typename _type , size_t _vN>
reverse_iterator< _type * > | rend (_type(&array)[_vN])
template<typename _tElem >
reverse_iterator< const _tElem * > | rend (std::initializer_list< _tElem > il)
template<typename _tRange >
auto | crbegin (const _tRange &c) -> decltype(ystdex::rbegin(c))
template<typename _tRange >
auto | crend (const _tRange &c) -> decltype(ystdex::rend(c))
template<class _tRange >
auto | size (const _tRange &c) -> decltype(c.size())
template<typename _type , size_t _vN>
size_t | size (const _type(&)[_vN])
template<typename _tElem >
size_t | size (std::initializer_list< _tElem > il)
template<class _tRange >
auto | empty (const _tRange &c) -> decltype(c.empty())
template<typename _type , size_t _vN>
bool | empty (const _type(&)[_vN])
template<typename _tElem >
bool | empty (std::initializer_list< _tElem > il)
template<typename _tRange >
auto | data (_tRange &c) -> decltype(c.data())
template<typename _tRange >
auto | data (const _tRange &c) -> decltype(c.data())
template<typename _type , size_t _vN>
_type * | data (_type(&array)[_vN])
template<typename _tElem >
const _tElem * | data (std::initializer_list< _tElem > il)
template<typename _type , size_t _vN>
_type * | data (_type(&&array)[_vN])
template<typename _tElem >
const _tElem * | cbegin (std::initializer_list< _tElem > il)
template<typename _tElem >
const _tElem * | cend (std::initializer_list< _tElem > il)
template<typename _tElem >
reverse_iterator< const _tElem * > | crbegin (std::initializer_list< _tElem > il)
template<typename _tElem >
reverse_iterator< const _tElem * > | crend (std::initializer_list< _tElem > il)
template<typename _type >
enable_if_t< is_floating_point< _type >::value, bool > | is_zero (_type x)
| 判断指定的值是否为零值。 更多...
template<typename _type , typename = enable_if_t<!is_floating_point<_type>::value>>
bool | is_zero (_type x)
template<typename _type >
_type | round_in_nocheck (_type x, _type err)
| 指定误差内舍入。 更多...
template<typename _type >
_type | round_in (_type x, _type err)
template<typename _type >
_type | pow_int (_type x, size_t n)
| 计算整数次幂。 更多...
template<typename _type >
_type | square (_type x)
| 计算平方。 更多...
template<typename _type >
_type | cube (_type x)
| 计算立方。 更多...
template<typename _type >
_type | quad (_type x)
| 计算四次方。 更多...
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
common_type_t< fixed_point< _tBase1, _vInt1, _vFrac1 >, fixed_point< _tBase2, _vInt2, _vFrac2 > > | operator+ (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
enable_if_t< is_arithmetic< _type >::value, common_type_t< fixed_point< _tBase, _vInt, _vFrac >, _type > > | operator+ (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
enable_if_t< is_arithmetic< _type >::value, common_type_t< _type, fixed_point< _tBase, _vInt, _vFrac > > > | operator+ (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
common_type_t< fixed_point< _tBase1, _vInt1, _vFrac1 >, fixed_point< _tBase2, _vInt2, _vFrac2 > > | operator- (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
enable_if_t< is_arithmetic< _type >::value, common_type_t< fixed_point< _tBase, _vInt, _vFrac >, _type > > | operator- (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
enable_if_t< is_arithmetic< _type >::value, common_type_t< _type, fixed_point< _tBase, _vInt, _vFrac > > > | operator- (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
common_type_t< fixed_point< _tBase1, _vInt1, _vFrac1 >, fixed_point< _tBase2, _vInt2, _vFrac2 > > | operator* (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
enable_if_t< is_arithmetic< _type >::value, common_type_t< fixed_point< _tBase, _vInt, _vFrac >, _type > > | operator* (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
enable_if_t< is_arithmetic< _type >::value, common_type_t< _type, fixed_point< _tBase, _vInt, _vFrac > > > | operator* (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
common_type_t< fixed_point< _tBase1, _vInt1, _vFrac1 >, fixed_point< _tBase2, _vInt2, _vFrac2 > > | operator/ (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
enable_if_t< is_arithmetic< _type >::value, common_type_t< fixed_point< _tBase, _vInt, _vFrac >, _type > > | operator/ (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
enable_if_t< is_arithmetic< _type >::value, common_type_t< _type, fixed_point< _tBase, _vInt, _vFrac > > > | operator/ (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator== (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator== (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator== (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator!= (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator!= (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator!= (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator< (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator< (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator< (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator<= (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator<= (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator<= (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator> (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator> (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator> (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>
bool | operator>= (const fixed_point< _tBase1, _vInt1, _vFrac1 > &x, const fixed_point< _tBase2, _vInt2, _vFrac2 > &y)
template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >
bool | operator>= (const fixed_point< _tBase, _vInt, _vFrac > &x, const _type &y)
template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>
bool | operator>= (const _type &x, const fixed_point< _tBase, _vInt, _vFrac > &y)
template<class _type >
void | ref (const _type &&)=delete
template<typename _type >
lref< const _type > | cref (const _type &t)
template<class _type >
void | cref (const _type &&)=delete
template<typename _type >
_type & | unref (_type &&x)
| 解除引用包装。 更多...
template<typename _type >
_type & | unref (std::reference_wrapper< _type > x)
template<typename _type >
_type & | unref (lref< _type > x)
template<bool _bNoThrow = true, typename _type >
guard< _type > | make_guard (_type f)
template<typename _tState = bool, bool _bNoThrow = true, typename _func >
guard< one_shot< decay_t< _func >, void, decay_t< _tState > >, _bNoThrow > | unique_guard (_func &&f, _tState &&s=true)
template<typename _tRes , typename _tState = bool, bool _bNoThrow = true, typename _func >
guard< one_shot< _func, _tRes, decay_t< _tState > >, _bNoThrow > | unique_state_guard (_func &&f, _tRes r={}, _tState &&s=true)
template<typename _func , typename _type = void>
std::shared_ptr< _type > | share_guard (_func f, _type *p={})
| 创建共享作用域守卫。 更多...
template<class _type >
auto | dismiss (_type &gd) -> decltype(gd.dismiss())
| 解除操作。 更多...
template<typename _func , typename _tRes , typename _tState >
void | dismiss (const one_shot< _func, _tRes, _tState > &gd)
template<typename _func , bool _bNoThrow>
auto | dismiss (guard< _func, _bNoThrow > &gd) -> decltype(dismiss(gd.func))
| 使用 ADL dismiss 。 更多...
template<typename _tChar , class _tTraits >
bool | streambuf_equal (std::basic_streambuf< _tChar, _tTraits > &a, std::basic_streambuf< _tChar, _tTraits > &b)
| 比较指定流缓冲区的内容相等。 更多...
template<class _tString >
basic_string_view< typename string_traits< _tString >::value_type, typename string_traits< _tString >::traits_type > | make_string_view (const _tString &str)
| 从字符串创建 basic_string_view 对象。 更多...
template<class _tRange >
auto | string_begin (_tRange &c) -> decltype(c.begin())
template<class _tRange >
auto | string_begin (const _tRange &c) -> decltype(c.begin())
template<typename _tChar >
_tChar * | string_begin (_tChar *str)
template<typename _tElem >
auto | string_begin (std::initializer_list< _tElem > il) -> decltype(il.begin())
template<class _tRange >
auto | string_end (_tRange &c) -> decltype(c.end())
template<class _tRange >
auto | string_end (const _tRange &c) -> decltype(c.end())
template<typename _tChar >
_tChar * | string_end (_tChar *str)
template<typename _tElem >
auto | string_end (std::initializer_list< _tElem > il) -> decltype(il.end())
template<typename _tChar >
bool | string_empty (const _tChar *str)
| 判断字符串是否为空。 更多...
template<typename _type >
auto | string_empty (const _type &str) -> decltype(size(str))
template<typename _tElem >
size_t | string_empty (std::initializer_list< _tElem > il)
template<typename _tChar >
size_t | string_length (const _tChar *str)
| 计算字符串长度。 更多...
template<typename _type >
auto | string_length (const _type &str) -> decltype(size(str))
template<typename _tElem >
size_t | string_length (std::initializer_list< _tElem > il)
template<typename _tRange1 , typename _tRange2 , typename _fPred >
bool | begins_with (const _tRange1 &input, const _tRange2 &test, _fPred comp)
| 判断第一参数指定的串是否以第二参数起始。 更多...
template<typename _tRange1 , typename _tRange2 >
bool | begins_with (const _tRange1 &input, const _tRange2 &test)
template<typename _tRange1 , typename _tRange2 , typename _fPred >
bool | ends_with (const _tRange1 &input, const _tRange2 &test, _fPred comp)
| 判断第一参数指定的串是否以第二参数结束。 更多...
template<typename _tRange1 , typename _tRange2 >
bool | ends_with (const _tRange1 &input, const _tRange2 &test)
template<class _tString , typename _type >
bool | exists_substr (const _tString &str, const _type &sub)
| 判断是否存在子串。 更多...
template<class _tString , typename _type >
bool | exists_substr (const _tString &str, const typename _tString::value_type *p_sub)
template<class _tString >
auto | normalize (_tString &str) -> decltype(str.resize(ystdex::ntctslen(str.c_str())))
| NTCTS 正规化：保留空字符之前的字符。 更多...
template<class _tString , typename = ystdex::enable_for_string_class_t<_tString>>
_tString && | ntctsncpy (_tString &&str, const typename string_traits< _tString >::const_pointer s, const typename string_traits< _tString >::size_type n)
| 复制不超过指定长度的 NTCTS 。 更多...
template<class _tString , typename = ystdex::enable_for_string_class_t<_tString>>
_tString && | ntctsncpy (_tString &&str, _tString &&s, const typename string_traits< _tString >::size_type n)
template<class _tString >
_tString && | restrict_length (_tString &&str, const typename string_traits< _tString >::size_type n)
| 限制长度不超过指定参数。 更多...
template<class _tString >
_tString | alph (_tString &str)
| 取字母表：有序的字符串的不重复序列。 更多...
template<class _tString >
void | concat (_tString &str, size_t n)
| 重复串接。 更多...
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_left (typename string_traits< _tString >::size_type pos, _tString &&str)
| 删除字符串中指定位置或指定字符最先出现的位置的左侧的字符串。 更多...
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_left (_tString &&str, typename string_traits< _tString >::value_type c)
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_left (_tString &&str, const remove_reference_t< _tString > &t)
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_left (_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >(" \f\n\r\t\v")[0])
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_right (typename string_traits< _tString >::size_type pos, _tString &&str)
| 删除字符串中指定位置或指定字符最后出现的位置的右侧的字符串。 更多...
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_right (_tString &&str, typename string_traits< _tString >::value_type c)
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_right (_tString &&str, const remove_reference_t< _tString > &t)
template<class _tString >
enable_if_t< is_class< decay_t< _tString > >::value, _tString && > | erase_right (_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >(" \f\n\r\t\v")[0])
template<class _tString >
_tString && | ltrim (_tString &&str, typename string_traits< _tString >::value_type c)
| 删除字符串中指定的连续前缀字符。 更多...
template<class _tString >
_tString && | ltrim (_tString &&str, const _tString &t)
template<class _tString >
_tString && | ltrim (_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >(" \f\n\r\t\v")[0])
template<class _tString >
_tString && | rtrim (_tString &&str, typename string_traits< _tString >::value_type c)
| 删除字符串中指定的连续后缀字符。 更多...
template<class _tString >
_tString && | rtrim (_tString &&str, const remove_reference_t< _tString > &t)
template<class _tString >
_tString && | rtrim (_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >(" \f\n\r\t\v")[0])
template<class _tString >
_tString && | trim (_tString &&str, typename string_traits< _tString >::value_type c)
| 删除字符串中指定的连续前缀与后缀字符。 更多...
template<class _tString >
_tString && | trim (_tString &&str, const _tString &t)
template<class _tString >
_tString && | trim (_tString &&str, typename string_traits< _tString >::const_pointer t=&to_array< typename string_traits< _tString >::value_type >(" \f\n\r\t\v")[0])
template<typename _tString , typename... _tParams>
_tString | find_prefix (const _tString &str, _tParams &&... args)
| 取前缀子字符串。 更多...
template<typename _tString , typename... _tParams>
_tString | find_suffix (const _tString &str, _tParams &&... args)
| 取后缀子字符串。 更多...
template<typename _tString >
string_traits< _tString >::value_type | get_quote_mark_nonstrict (const _tString &str)
| 取相同的前缀和后缀元素。 更多...
template<typename _tString >
decay_t< _tString > | quote (_tString &&str, typename string_traits< decay_t< _tString >>::value_type c=typename string_traits< decay_t< _tString >>::value_type('"'))
| 取添加前缀和后缀的字符串。 更多...
template<typename _tString , typename _tString2 >
enable_if_t<!is_convertible< _tString2, typename string_traits< decay_t< _tString > >::value_type >::value, decay_t< _tString > > | quote (_tString &&str, const _tString2 &s)
template<typename _tString , typename _tPrefix , typename _tSuffix >
auto | quote (_tString &&str, _tPrefix &&pfx, _tSuffix &&sfx) -> decltype(std::forward< decltype(pfx)>(pfx)+std::forward< decltype(str)>(str)+std::forward< decltype(sfx)>(sfx))
template<typename _tString >
_tString | get_mid (const _tString &str, typename _tString::size_type l=1)
| 取删除前缀和后缀的子字符串。 更多...
template<typename _tString >
_tString | get_mid (const _tString &str, typename _tString::size_type l, typename _tString::size_type r)
template<typename _tChar , class _tTraits , class _tAlloc , typename _func >
std::basic_istream< _tChar, _tTraits > & | extract (std::basic_istream< _tChar, _tTraits > &is, std::basic_string< _tChar, _tTraits, _tAlloc > &str, _func f)
| 从输入流中取字符串。 更多...
template<typename _tChar , class _tTraits , class _tAlloc >
std::basic_istream< _tChar, _tTraits > & | extract_line (std::basic_istream< _tChar, _tTraits > &is, std::basic_string< _tChar, _tTraits, _tAlloc > &str, _tChar delim)
template<typename _tChar , class _tTraits , class _tAlloc >
std::basic_istream< _tChar, _tTraits > & | extract_line (std::basic_istream< _tChar, _tTraits > &is, std::basic_string< _tChar, _tTraits, _tAlloc > &str)
template<typename _tChar , class _tTraits , class _tAlloc >
std::basic_istream< _tChar, _tTraits > & | extract_line_cr (std::basic_istream< _tChar, _tTraits > &is, std::basic_string< _tChar, _tTraits, _tAlloc > &str, _tChar delim_cr='\r', _tChar delim='\n')
| 同 `ystdex::extract_line` ，但允许分隔符包含附加的前缀字符。 更多...
template<typename _tChar , class _tString >
std::basic_ostream< _tChar, typename _tString::traits_type > & | write (std::basic_ostream< _tChar, typename _tString::traits_type > &os, const _tString &str, typename _tString::size_type pos=0, typename _tString::size_type n=_tString::npos)
| 非格式输出。 更多...
template<typename _tChar , class _tTraits , size_t _vN>
std::basic_ostream< _tChar, _tTraits > & | write (std::basic_ostream< _tChar, _tTraits > &os, const _tChar(&s)[_vN])
template<typename _tChar , class _tTraits , size_t _vN>
std::basic_ostream< _tChar, _tTraits > & | write_literal (std::basic_ostream< _tChar, _tTraits > &os, const _tChar(&s)[_vN])
template<typename _type >
enable_if_t< is_arithmetic< _type >::value, string > | to_string (_type val)
| 转换为字符串：basic_string 的实例对象。 更多...
template<typename _type >
enable_if_t< is_enum< _type >::value, string > | to_string (_type val)
template<typename _type , class _tStream = std::ostringstream, class _tString = basic_string<typename _tStream::char_type, typename _tStream::traits_type, typename _tStream::allocator_type>>
enable_if_t< is_class< _type >::value, _t< details::stream_str_det< _tStream, _tString > > > | to_string (const _type &x)
template<typename _type >
enable_if_t< is_arithmetic< _type >::value, wstring > | to_wstring (_type val)
template<typename _type >
enable_if_t< is_enum< _type >::value, wstring > | to_wstring (_type val)
template<typename _type , class _tStream = std::wostringstream, class _tString = wstring>
enable_if_t< is_class< _type >::value, _t< details::stream_str_det< _tStream, _tString > > > | to_wstring (const _type &x)
template<typename _type , typename _tString , typename... _tParams>
_type | ston (const _tString &str, _tParams &&... args)
| 转换表示数的字符串。 更多...
template<class _tString = string>
_tString | vsfmt (const typename string_traits< _tString >::value_type *fmt, std::va_list args)
| 以 C 标准输出格式的输出字符串类型的对象。 更多...
template<class _tString = string>
_tString | sfmt (const typename string_traits< _tString >::value_type *fmt,...)
| 以 C 标准输出格式的输出 basic_string 实例的对象。 更多...
template string | sfmt< string > (const char *,...)
| 显式实例化：以 C 标准输出格式的输出 string 对象。 更多...
template<typename _type , typename _tString , typename _func >
bool | filter_prefix (const _tString &str, const _type &prefix, _func f)
| 过滤前缀：存在前缀时处理移除前缀后的子串。 更多...
template<typename _type , typename _tString >
_tString | cond_prefix (const _tString &str, const _type &prefix, _tString &&val={})
| 选择性过滤前缀。 更多...
template<typename _tChar , class _tTraits >
bool | operator== (basic_string_view< _tChar, _tTraits > x, decay_t< basic_string_view< _tChar, _tTraits >> y)
template<typename _tChar , class _tTraits >
bool | operator== (decay_t< basic_string_view< _tChar, _tTraits >> x, basic_string_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
bool | operator< (basic_string_view< _tChar, _tTraits > x, basic_string_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
bool | operator< (basic_string_view< _tChar, _tTraits > x, decay_t< basic_string_view< _tChar, _tTraits >> y)
template<typename _tChar , class _tTraits >
bool | operator< (decay_t< basic_string_view< _tChar, _tTraits >> x, basic_string_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
std::basic_ostream< _tChar, _tTraits > & | operator<< (std::basic_ostream< _tChar, _tTraits > &os, basic_string_view< _tChar, _tTraits > str)
template<typename _type >
void | swap_dependent (_type &x, _type &y)(is_nothrow_swappable< _type >())
| 支持基于 ystdex_swap::swap 的 ADL 的左值交换。 更多...
template<typename _type >
enable_if_t< is_nothrow_constructible< _type, volatile _type >) &&is_nothrow_assignable< _type &, volatile _type && >) &&is_nothrow_assignable< volatile _type &, _type && >)> | swap_volatile (_type &x, volatile _type &y)
| 交换非 volatile 左值和 volatile 左值。 更多...
template<typename _type >
auto | swap_volatile (volatile _type &x, _type &y) -> decltype(ystdex::swap_volatile(y, x))
template<typename _type , size_t _vN>
void | swap_volatile (_type(&x)[_vN], add_volatile_t< _type[_vN]> &y)
template<typename _type >
void | swap_underlying (_type &x, _type &y)
| 交换相同标准布局类型可修改左值的存储。 更多...
template<typename _type , typename _type2 , typename = enable_if_t<!details::swap_volatile_avail<_type, _type2>::value>>
void | vswap (_type &&x, _type2 &&y)
| 交换可能是 volatile 的左值或右值。 更多...
template<typename _type , typename _type2 >
auto | vswap (_type &&x, _type2 &&y) -> enable_if_t< details::swap_volatile_avail< _type, _type2 >::value >
template<typename _type , typename... _tParams>
_type & | create_and_swap (_type &obj, _tParams &&... args)
| 创建对象并交换。 更多...
template<typename _type , typename _type2 = _type>
_type & | copy_and_swap (_type &obj, const _type2 &new_val)
| 复制对象并交换。 更多...
template<typename _type , typename _type2 = _type>
_type | exchange (_type &obj, _type2 &&new_val)
| 交换值并返回旧值。 更多...
template<typename _type >
enable_if_t< sizeof(invoke_result_t< _type >) !=0, details::thunk_call_proxy< _type > > | make_thunk (const _type &obj)
template<typename _tChar , class _tTraits >
bool | operator== (basic_tstring_view< _tChar, _tTraits > x, decay_t< basic_tstring_view< _tChar, _tTraits >> y)
template<typename _tChar , class _tTraits >
bool | operator== (decay_t< basic_tstring_view< _tChar, _tTraits >> x, basic_tstring_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
bool | operator< (basic_tstring_view< _tChar, _tTraits > x, basic_tstring_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
bool | operator< (basic_tstring_view< _tChar, _tTraits > x, decay_t< basic_tstring_view< _tChar, _tTraits >> y)
template<typename _tChar , class _tTraits >
bool | operator< (decay_t< basic_tstring_view< _tChar, _tTraits >> x, basic_tstring_view< _tChar, _tTraits > y)
template<typename _tChar , class _tTraits >
std::basic_ostream< _tChar, _tTraits > & | operator<< (std::basic_ostream< _tChar, _tTraits > &os, basic_tstring_view< _tChar, _tTraits > str)
static const auto | tuple_not_found (size_t(-1))
| 表示没有找到的索引。 更多...
template<typename _pDst , typename _tSrc >
enable_if_t< and_< is_object_pointer< _pDst >, is_aligned_compatible< _tSrc, remove_pointer_t< _pDst > > >::value, _pDst > | aligned_cast (_tSrc *v)
| 保证对齐兼容的显式转换。 更多...
template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_compatible<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>
auto | aligned_cast (_tSrc &&v) -> decltype(std::forward< decltype(reinterpret_cast< _rDst >(v))>(reinterpret_cast< _rDst >(v)))
template<typename _pDst , typename _tSrc >
enable_if_t< and_< is_object_pointer< _pDst >, is_aligned_storable< _tSrc, remove_pointer_t< _pDst > > >::value, _pDst > | aligned_store_cast (_tSrc *v)
| 保证对齐存储的显式转换。 更多...
template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_storable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>
auto | aligned_store_cast (_tSrc &&v) -> decltype(std::forward< decltype(reinterpret_cast< _rDst >(v))>(reinterpret_cast< _rDst >(v)))
template<typename _pDst , typename _tSrc >
enable_if_t< and_< is_object_pointer< _pDst >, is_aligned_replaceable< _tSrc, remove_pointer_t< _pDst > > >::value, _pDst > | aligned_replace_cast (_tSrc *v)
| 保证对齐替换存储的显式转换。 更多...
template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_replaceable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>
auto | aligned_replace_cast (_tSrc &&v) -> decltype(std::forward< decltype(reinterpret_cast< _rDst >(v))>(reinterpret_cast< _rDst >(v)))
template<typename _pDst , typename _tSrc >
enable_if_t< and_< is_object_pointer< _pDst >, is_trivially_replaceable< _tSrc, remove_pointer_t< _pDst > > >::value, _pDst > | replace_cast (_tSrc *v)
| 保证平凡替换存储的显式转换。 更多...
template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_trivially_replaceable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>
auto | replace_cast (_tSrc &&v) -> decltype(std::forward< decltype(reinterpret_cast< _rDst >(v))>(reinterpret_cast< _rDst >(v)))
template<typename _type , typename _tObj , typename... _tParams>
pun_ptr< _type > | make_pun (_tObj &obj, _tParams &&... args)
| 构造避免严格别名分析限制的缓冲独占所有权指针指定的值初始化对象。 更多...
template<typename _type , typename _tObj >
pun_ptr< _type > | make_pun_default (_tObj &obj)
| 构造避免严格别名分析限制的缓冲独占所有权指针指定的默认初始化对象。 更多...
template<typename _type >
const type_info & | type_id ()
template<typename _type , typename _type2 >
forward_like_t< _type, _type2 > | forward_like (_type2 &&x)
| 按第一模板参数指定类型蕴含的值类别传递参数。 更多...
template<typename _type >
add_const_t< _type > & | as_const (_type &t)
| 转换 const 引用。 更多...
template<class _type >
void | as_const (const _type &&)=delete
template<typename _type , typename _type2 = _type>
_type | copy_or_move (bool copy, _type &obj)
| 按参数复制或转移。 更多...
template<typename _type >
enable_if_convertible_t< _type, decay_t< _type >, decay_t< _type > > | decay_copy (_type &&arg)
| 退化复制。 更多...
template<typename _type , typename = enable_if_t<is_enum<_type>::value>>
underlying_type_t< _type > | underlying (_type val)
| 取枚举值的底层整数。 更多...
template<typename _type , typename , typename... >
_type & | parameterize_static_object ()
| 类型参数化静态对象。 更多...
template<typename _type , size_t... >
_type & | parameterize_static_object ()
| 非类型参数化静态对象。 更多...
template<typename _tKey , typename... _tKeys, typename _fInit , typename... _tParams>
auto | get_init (_fInit &&f, _tParams &&... args) -> decltype(f(std::forward< decltype(args)>(args)...))&
| 取类型标识和初始化调用指定的对象。 更多...
template<size_t... _vKeys, typename _fInit , typename... _tParams>
auto | get_init (_fInit &&f, _tParams &&... args) -> decltype(f(std::forward< decltype(args)>(args)...))&
| 取非类型标识和初始化调用指定的对象。 更多...
char * | strcatdup (const char *s1, const char *s2, void *(*fun)(size_t))
void | throw_invalid_construction ()
void | throw_allocator_mismatch_error ()

## 变量

const class ystdex::nullptr_t | nullptr = {}
const first_tag | get_first {}
| 操纵子。 更多...
const first_tag | get_key {}
const second_tag | get_second {}
const second_tag | get_value {}
const struct ystdex::get_indirect_t | get_indirect
const struct ystdex::get_get_t | get_get
const struct ystdex::cpp2017::nullopt_t | nullptr
const struct ystdex::default_init_t | default_init
const struct ystdex::value_init_t | value_init
template<typename _type >
uniformed_tags::in_place_tag | in_place_type (empty_base< _type >)
template<size_t _vIdx>
uniformed_tags::in_place_tag | in_place_index (size_t_< _vIdx >)

## 详细描述

`<memory>` 特性测试宏。

`<string>` 特性测试宏。

`<iterator>` 特性测试宏。

`<optional>` 特性测试宏。

`<memory_resource>` 特性测试宏。

<functional> 特性测试宏。

<tuple> 特性测试宏。

`<algorithm>` 特性测试宏。

参见
  https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations 。
  https://blogs.msdn.microsoft.com/vcblog/2015/06/19/c111417-features-in-vs-2015-rtm/ 。

自从
  build 832

参见
  WG21 P0941R2 2.2 。
  https://blogs.msdn.microsoft.com/vcblog/2016/10/11/c1417-features-and-stl-fixes-in-vs-15-preview-5/ 。

自从
  build 835
  build 628

参见
  WG21 P0941R2 2.2 。
  https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance 。

自从
  build 833
  build 175

参见
  WG21 P0941R2 2.2 。
  https://blogs.msdn.microsoft.com/vcblog/2015/06/19/c111417-features-in-vs-2015-rtm/ 。

自从
  build 679

参见
  WG21 P0941R2 2.2 。

自从
  build 628

参见
  WG21 P0941R2 2.2 。
  https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance 。

自从
  build 842
  build 842

参见
  WG21 P0941R2 2.2 。
  https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance 。

自从
  build 842

参见
  WG21 P0941R2 2.2 。
  WG21 P0031R0 。

自从
  build 834

参见
  LWG 2285 。
  https://blogs.msdn.microsoft.com/vcblog/2016/01/22/vs-2015-update-2s-stl-is-c17-so-far-feature-complete/ 。

自从
  build 832

参见
  WG21 N4280 。
  https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance 。

自从
  build 834

参见
  WG21 P0254R2 。
  WG21 P0941R2 2.2 。
  https://docs.microsoft.com/en-us/cpp/visual-cpp-language-conformance 。

自从
  build 837

## 类型定义说明

## ◆ add_ptr_t

template<typename _type >

using ystdex::add_ptr_t = typedef _type*

在文件 type_traits.hpp 第 53 行定义.

## ◆ add_ref_t

template<typename _type >

using ystdex::add_ref_t = typedef _type&

在文件 type_traits.hpp 第 56 行定义.

## ◆ add_rref_t

template<typename _type >

using ystdex::add_rref_t = typedef _type&&

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

## ◆ addrof_t

template<typename _type >

using ystdex::addrof_t = typedef decltype(&std::declval<_type>())

自从
  build 669

在文件 type_traits.hpp 第 66 行定义.

## ◆ alloc_const_pointer_t

template<class _tAlloc >

using ystdex::alloc_const_pointer_t = typedef typename allocator_traits<_tAlloc>::const_pointer

在文件 allocator.hpp 第 406 行定义.

## ◆ alloc_difference_type_t

template<class _tAlloc >

using ystdex::alloc_difference_type_t = typedef typename allocator_traits<_tAlloc>::difference_type

在文件 allocator.hpp 第 412 行定义.

## ◆ alloc_pointer_t

template<class _tAlloc >

using ystdex::alloc_pointer_t = typedef typename allocator_traits<_tAlloc>::pointer

自从
  build 867

在文件 allocator.hpp 第 403 行定义.

## ◆ alloc_size_type_t

template<class _tAlloc >

using ystdex::alloc_size_type_t = typedef typename allocator_traits<_tAlloc>::size_type

在文件 allocator.hpp 第 409 行定义.

## ◆ allocator_guard

template<class _tAlloc >

using ystdex::allocator_guard = typedef std::unique_ptr<alloc_value_t<_tAlloc>, allocator_guard_delete<_tAlloc> >

分配器守卫。

自从
  build 843

在文件 allocator.hpp 第 868 行定义.

## ◆ bidirectional_monomorphic_iterator

using ystdex::bidirectional_monomorphic_iterator = typedef any_bidirectional_iterator<void_ref, ptrdiff_t, void*, void_ref>

在文件 any_iterator.hpp 第 530 行定义.

## ◆ bitseg_traits

template<size_t... _vSize>

using ystdex::bitseg_traits = typedef nodep::bitseg_traits<_vSize...>

自从
  build 834

在文件 bitseg.hpp 第 203 行定义.

## ◆ bool_

template<bool _vInt>

using ystdex::bool_ = typedef integral_constant< bool , _vInt>

在文件 integral_constant.hpp 第 93 行定义.

## ◆ byte

using ystdex::byte = typedef unsigned char

字节类型。

参见
  WG21 P0298R2 。

自从
  build 209

待办事项:
  检查 maybe_unused 属性，允许时使用和标准库定义一致的形式。

专用于表示字节的类型，不保证为整数类型或字符类型。 注意 ISO C++ 对访问存储的 glvalue 的类型有严格限制，当没有对象生存期保证时， 仅允许（可能 cv 修饰的） char 和 unsigned char 及其指针/引用或 void* ， 而不引起未定义行为(undefined behavior) 。 ISO C++17 核心语言特性对 std::byte 别名存储提供支持，其它情形只有 char 、 signed char 和 unsigned char 满足可移植地支持别名。 由于 char 的算术操作行为是否按有符号处理未指定，使用 unsigned char 表示字节以便获得确定的行为，同时对字符处理（如 std::fgetc ）保持较好的兼容性。 使用 unsigned char 仍是实现细节。依赖此类型上不在 std::byte 的操作不被支持。

在文件 ydef.h 第 1283 行定义.

## ◆ char_

template<char _vInt>

using ystdex::char_ = typedef integral_constant< char , _vInt>

在文件 integral_constant.hpp 第 94 行定义.

## ◆ cloneable

using ystdex::cloneable = typedef bases::cloneable

在文件 base.h 第 219 行定义.

## ◆ common_nonvoid_t

template<typename _type , typename... _types>

using ystdex::common_nonvoid_t = typedef cond_or_t<is_void<_type>, _type, common_type_t, _types...>

取公共非空类型：若第一参数为非空类型则为第一参数，否则从其余参数推断。

自从
  build 562

在文件 type_op.hpp 第 273 行定义.

## ◆ common_underlying_t

template<typename... _types>

using ystdex::common_underlying_t = typedef common_type_t<underlying_cond_type_t<_types>...>

取公共底层类型。

自从
  build 629

在文件 type_op.hpp 第 281 行定义.

## ◆ cond_or

template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::cond_or = typedef cond_t<_tCond, vdefer<_gOp, _tParams...>, identity<_tDefault> >

条件判断，若失败使用默认类型。

自从
  build 723

参见
  detected_or
  detected_or_t

在文件 type_op.hpp 第 261 行定义.

## ◆ cond_or_t

template<class _tCond , typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::cond_or_t = typedef _t<cond_or<_tCond, _tDefault, _gOp, _tParams...> >

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

## ◆ cond_t

template<typename _tCond , typename _tThen = true_, typename _tElse = false_>

using ystdex::cond_t = typedef _t<cond<_tCond, _tThen, _tElse> >

参见
  conditional_t

自从
  build 730

在文件 meta.hpp 第 794 行定义.

## ◆ decrement_post_t

template<typename _type >

using ystdex::decrement_post_t = typedef decltype(std::declval<_type>()--)

在文件 type_traits.hpp 第 89 行定义.

## ◆ decrement_t

template<typename _type >

using ystdex::decrement_t = typedef decltype(++std::declval<_type>())

在文件 type_traits.hpp 第 86 行定义.

## ◆ defer_element

template<typename _tPointer , typename _tDefault = void>

using ystdex::defer_element = typedef cond_or<not_<is_void<remove_pointer_t<_tPointer> >>, _tDefault, indirect_element_t, _tPointer>

取指针对应的元素类型。

当指针为空指针时为 `void` ，否则间接操作的元素类型。

在文件 memory.hpp 第 409 行定义.

## ◆ deref_self

template<typename _type >

using ystdex::deref_self = typedef bases::deref_self<_type>

在文件 base.h 第 222 行定义.

## ◆ derived_entity

template<class _tBase , typename... _tParams>

using ystdex::derived_entity = typedef bases::derived_entity<_tBase, _tParams...>

在文件 base.h 第 225 行定义.

## ◆ detected_or

template<typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::detected_or = typedef details::detector<_tDefault, void, _gOp, _tParams...>

在文件 meta.hpp 第 403 行定义.

## ◆ detected_or_t

template<typename _tDefault , template< typename... > class _gOp, typename... _tParams>

using ystdex::detected_or_t = typedef _t<detected_or<_tDefault, _gOp, _tParams...> >

在文件 meta.hpp 第 407 行定义.

## ◆ detected_t

template<template< typename... > class _gOp, typename... _tParams>

using ystdex::detected_t = typedef _t<details::detector<nonesuch, void, _gOp, _tParams...> >

在文件 meta.hpp 第 399 行定义.

## ◆ enable_fallback_t

template<template< typename... > class _gOp, typename _func , typename... _tParams>

using ystdex::enable_fallback_t = typedef enable_if_t<!is_detected<_gOp, _tParams&&...>::value, decltype(std::declval<_func>()(std::declval<_tParams>()...))>

启用备用重载。

自从
  build 651

在文件 function.hpp 第 429 行定义.

## ◆ enable_for_input_iterator_t

template<typename _tParam , typename _type = void, typename = indirect_t<_tParam&>, typename = increment_t<_tParam&>>

using ystdex::enable_for_input_iterator_t = typedef enable_if_t<details::input_iterator_reqirement_t<_tParam>::value, _type>

选择输入迭代器类型的特定重载避免和其它类型冲突。

自从
  build 865

在文件 iterator_trait.hpp 第 106 行定义.

## ◆ enable_if_convertible_t

template<typename _tFrom , typename _tTo , typename _type = void>

using ystdex::enable_if_convertible_t = typedef enable_if_t<is_convertible<_tFrom, _tTo>::value, _type>

参见
  enable_if_t

自从
  build 575

在文件 meta.hpp 第 836 行定义.

## ◆ enable_if_inconvertible_t

template<typename _tFrom , typename _tTo , typename _type = void>

using ystdex::enable_if_inconvertible_t = typedef enable_if_t<!is_convertible<_tFrom, _tTo>::value, _type>

自从
  build 679

在文件 meta.hpp 第 841 行定义.

## ◆ enable_if_interoperable_t

template<typename _type1 , typename _type2 , typename _type = void>

using ystdex::enable_if_interoperable_t = typedef enable_if_t<is_interoperable<_type1, _type2>::value, _type>

在文件 meta.hpp 第 845 行定义.

## ◆ enable_if_same_param_t

template<typename _type1 , typename _type2 , typename _type = void>

using ystdex::enable_if_same_param_t = typedef enable_if_t<is_same_param<_type1, _type2>::value, _type>

自从
  build 865

在文件 meta.hpp 第 855 行定义.

## ◆ enable_if_same_t

template<typename _type1 , typename _type2 , typename _type = void>

using ystdex::enable_if_same_t = typedef enable_if_t<is_same<_type1, _type2>::value, _type>

自从
  build 614

在文件 meta.hpp 第 850 行定义.

## ◆ enable_when

template<bool _bCond>

using ystdex::enable_when = typedef enable_if_t<_bCond, when<true> >

类似 enable_if_t 的元函数，但具有较低匹配优先级，避免偏特化歧义。

参见
  enable_if_t
  when

自从
  build 649

在文件 meta.hpp 第 322 行定义.

## ◆ equal_t

template<typename _type , typename _type2 = _type>

using ystdex::equal_t = typedef decltype(std::declval<_type>() == std::declval<_type2>())

在文件 type_traits.hpp 第 95 行定义.

## ◆ exclude_self_t

template<typename _tSelected , typename _tParam , typename _type = void>

using ystdex::exclude_self_t = typedef enable_if_t<!is_same_param<_tSelected, _tParam>::value, _type>

排除选择类型的特定参数的重载。

注解
  第一参数通常为类类型，可避免被选择的类的构造模板和复制/转移特殊成员函数冲突。

自从
  build 687

在文件 meta.hpp 第 864 行定义.

## ◆ exclude_tagged_params_t

template<typename... _tParams>

using ystdex::exclude_tagged_params_t = typedef enable_if_t<sizeof...(_tParams) == 0 ? true : details::decayed_not_tag_t< vseq::front_t<empty_base<_tParams...> >>::value>

排除选择类型的第一个参数为标签的重载。

在文件 any.h 第 1182 行定义.

## ◆ false_

using ystdex::false_ = typedef bool_<false>

在文件 integral_constant.hpp 第 110 行定义.

## ◆ first_t

template<typename _type >

using ystdex::first_t = typedef decltype(std::declval<_type>().first)

自从
  build 830

在文件 type_traits.hpp 第 105 行定义.

## ◆ forward_like_t

template<typename _type , typename _type2 >

using ystdex::forward_like_t = typedef conditional_t<is_lvalue_reference<_type>::value, remove_reference_t<_type2>&, remove_reference_t<_type2>&&>

按指定类型蕴含的值类别传递参数的结果类型。

参见
  https://stackoverflow.com/questions/46171843/moving-in-range-based-loop-in-generic-c-code 。

自从
  build 845

在文件 utility.hpp 第 51 行定义.

## ◆ forward_monomorphic_iterator

using ystdex::forward_monomorphic_iterator = typedef any_forward_iterator<void_ref, ptrdiff_t, void*, void_ref>

在文件 any_iterator.hpp 第 451 行定义.

## ◆ future_result_t

template<typename _fCallable , typename... _tParams>

using ystdex::future_result_t = typedef std::future<invoke_result_t<_fCallable, _tParams...> >

自从
  build 623

在文件 future.hpp 第 86 行定义.

## ◆ has_iterator_value_type

template<typename _type , typename _tIter >

using ystdex::has_iterator_value_type = typedef is_same<typename std::iterator_traits<_tIter>::value_type, _type>

判断迭代器是否具有相同的指定的值类型。

自从
  build 866

在文件 iterator_trait.hpp 第 55 行定义.

## ◆ id_func_clr_t

template<typename _type , size_t _vN = 1>

using ystdex::id_func_clr_t = typedef id_func_t<_type, _vN, const _type&>

取指定维数和 const 左值引用参数类型的多元映射扩展恒等函数类型。

在文件 function.hpp 第 440 行定义.

## ◆ id_func_rr_t

template<typename _type , size_t _vN = 1>

using ystdex::id_func_rr_t = typedef id_func_t<_type, _vN, _type&&>

取指定维数和 const 右值引用参数类型的多元映射扩展恒等函数类型。

在文件 function.hpp 第 444 行定义.

## ◆ id_func_t

template<typename _type , size_t _vN = 1, typename _tParam = _type>

using ystdex::id_func_t = typedef make_function_type_t<_type, vseq::join_n_t<_vN, empty_base<_tParam> >>

取指定维数和指定参数类型的多元映射扩展恒等函数类型。

在文件 function.hpp 第 435 行定义.

## ◆ identity_t

template<typename _type >

using ystdex::identity_t = typedef _t<identity<_type> >

自从
  build 595

在文件 meta.hpp 第 821 行定义.

## ◆ increment_post_t

template<typename _type >

using ystdex::increment_post_t = typedef decltype(std::declval<_type>()--)

自从
  build 867

在文件 type_traits.hpp 第 83 行定义.

## ◆ increment_t

template<typename _type >

using ystdex::increment_t = typedef decltype(++std::declval<_type>())

自从
  build 865

在文件 type_traits.hpp 第 78 行定义.

## ◆ indirect_element_t

template<typename _type >

using ystdex::indirect_element_t = typedef remove_reference_t<indirect_t<_type> >

自从
  build 671

在文件 type_traits.hpp 第 74 行定义.

## ◆ indirect_t

template<typename _type >

using ystdex::indirect_t = typedef decltype(*std::declval<_type>())

在文件 type_traits.hpp 第 69 行定义.

## ◆ input_monomorphic_iterator

using ystdex::input_monomorphic_iterator = typedef any_input_iterator<void_ref, ptrdiff_t, void*, void_ref_any>

在文件 any_iterator.hpp 第 375 行定义.

## ◆ int_

template<int _vInt>

using ystdex::int_ = typedef integral_constant< int , _vInt>

在文件 integral_constant.hpp 第 95 行定义.

## ◆ invoke_mem_fn_deref_t

template<typename _fCallable , typename _type , typename... _tParams>

using ystdex::invoke_mem_fn_deref_t = typedef decltype(((*std::declval<_type>()).*std::declval< _fCallable>())(std::declval<_tParams>()...))

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

## ◆ invoke_mem_fn_ref_t

template<typename _fCallable , typename _type , typename... _tParams>

using ystdex::invoke_mem_fn_ref_t = typedef decltype((std::declval<_type>().*std::declval< _fCallable>())(std::declval<_tParams>()...))

INVOKE 调用分派。

注解
  不含 std::reference_wrapper 处理。

参见
  ISO C++17 [func.require] 。

自从
  build 832

在文件 invoke.hpp 第 146 行定义.

## ◆ invoke_mem_obj_deref_t

template<typename _fCallable , typename _type >

using ystdex::invoke_mem_obj_deref_t = typedef decltype((*std::declval<_type>()).*std::declval<_fCallable>())

在文件 invoke.hpp 第 158 行定义.

## ◆ invoke_mem_obj_ref_t

template<typename _fCallable , typename _type >

using ystdex::invoke_mem_obj_ref_t = typedef decltype(std::declval<_type>().*std::declval<_fCallable>())

在文件 invoke.hpp 第 154 行定义.

## ◆ invoke_other_t

template<typename _fCallable , typename... _tParams>

using ystdex::invoke_other_t = typedef decltype(std::declval<_fCallable>()(std::declval<_tParams>()...))

在文件 invoke.hpp 第 162 行定义.

## ◆ is_detected_convertible

template<typename _tTo , template< typename... > class _gOp, typename... _tParams>

using ystdex::is_detected_convertible = typedef is_convertible<detected_t<_gOp, _tParams...>, _tTo>

在文件 meta.hpp 第 414 行定义.

## ◆ is_detected_exact

template<typename _tExpected , template< typename... > class _gOp, typename... _tParams>

using ystdex::is_detected_exact = typedef is_same<_tExpected, detected_t<_gOp, _tParams...> >

在文件 meta.hpp 第 411 行定义.

## ◆ is_narrowing_from_floating

template<typename _tDst , typename _tSrc >

using ystdex::is_narrowing_from_floating = typedef or_<is_narrowing_from_floating_to_integer<_tDst, _tSrc>, is_narrowing_from_floating_to_floating<_tDst, _tSrc> >

在文件 cast.hpp 第 79 行定义.

## ◆ is_narrowing_from_floating_to_floating

template<typename _tDst , typename _tSrc >

using ystdex::is_narrowing_from_floating_to_floating = typedef and_<is_floating_point<_tDst>, is_floating_point<_tSrc>, is_same<common_type_t<_tDst, _tSrc>, _tSrc> >

在文件 cast.hpp 第 74 行定义.

## ◆ is_nothrow_swap_movable

template<typename _type >

using ystdex::is_nothrow_swap_movable = typedef and_<is_nothrow_move_constructible<_type>, is_nothrow_move_assignable<_type> >

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

## ◆ llong_

template<long long _vInt>

using ystdex::llong_ = typedef integral_constant< long long , _vInt>

在文件 integral_constant.hpp 第 96 行定义.

## ◆ local_allocator

template<typename _type >

using ystdex::local_allocator = typedef cond_t<and_<has_mem_new<_type, size_t>, has_mem_delete<_type*> >, class_allocator<_type>, std::allocator<_type> >

局部分配器。

对支持类作用域分配的类类型为 class_allocator ，否则为 std::allocator 。

在文件 allocator.hpp 第 1007 行定义.

## ◆ locked_ptr

template<typename _type , class _tMutex = std::mutex, class _tLock = std::unique_lock<_tMutex>>

using ystdex::locked_ptr = typedef threading::locked_ptr<_type, _tMutex, _tLock>

独占所有权的锁定指针：默认使用标准库互斥量和锁。

参见
  threading::locked_ptr

自从
  build 551

在文件 concurrency.h 第 61 行定义.

## ◆ long_

template<long _vInt>

using ystdex::long_ = typedef integral_constant< long , _vInt>

在文件 integral_constant.hpp 第 97 行定义.

## ◆ make_fixed_t

template<size_t _vFrac, size_t _vInt = 1, bool _bSigned = false>

using ystdex::make_fixed_t = typedef fixed_point<conditional_t<_bSigned, typename make_width_int<_vFrac + _vInt>::least_type, typename make_width_int<_vFrac + _vInt>::unsigned_least_type>, _vFrac>

取包括指定有效二进制位和至少指定位整数的定点数类型。

自从
  build 561

在文件 rational.hpp 第 606 行定义.

## ◆ make_function_type_t

template<typename _tRet , class _tTuple >

using ystdex::make_function_type_t = typedef _t<make_function_type<_tRet, _tTuple> >

在文件 function.hpp 第 391 行定义.

## ◆ make_natural_sequence

template<typename _tInt , size_t _vN>

using ystdex::make_natural_sequence = typedef make_peano_sequence<_tInt, 0, _vN>

取自然数序列。

在文件 integer_sequence.hpp 第 268 行定义.

## ◆ make_natural_sequence_t

template<typename _tInt , size_t _vN>

using ystdex::make_natural_sequence_t = typedef _t<make_natural_sequence<_tInt, _vN> >

在文件 integer_sequence.hpp 第 271 行定义.

## ◆ make_parameter_list_t

template<typename _fCallable >

using ystdex::make_parameter_list_t = typedef _t<make_parameter_list<_fCallable> >

在文件 function.hpp 第 335 行定义.

## ◆ make_peano_sequence_t

template<typename _tInt , _tInt _vBase, size_t _vN>

using ystdex::make_peano_sequence_t = typedef _t<make_peano_sequence<_tInt, _vBase, _vN> >

自从
  build 590

在文件 integer_sequence.hpp 第 247 行定义.

## ◆ make_successor_t

template<typename _tInt , _tInt _vBase, class _tSeq >

using ystdex::make_successor_t = typedef _t<make_successor<_tInt, _vBase, _tSeq> >

在文件 integer_sequence.hpp 第 223 行定义.

## ◆ membuf

using ystdex::membuf = typedef basic_membuf<char>

在文件 streambuf.hpp 第 136 行定义.

## ◆ noncopyable

using ystdex::noncopyable = typedef bases::noncopyable

自从
  build 834

在文件 base.h 第 215 行定义.

## ◆ nonmovable

using ystdex::nonmovable = typedef bases::nonmovable

在文件 base.h 第 217 行定义.

## ◆ not_equal_t

template<typename _type , typename _type2 = _type>

using ystdex::not_equal_t = typedef decltype(std::declval<_type>() != std::declval<_type2>())

在文件 type_traits.hpp 第 98 行定义.

## ◆ object_result_t

template<typename _type , typename _tRes = pseudo_output>

using ystdex::object_result_t = typedef cond_t<is_object<_type>, _type, pseudo_output>

若类型不是对象类型则取后备结果类型（默认为 pseudo_output ）。

在文件 invoke.hpp 第 104 行定义.

## ◆ octet

using ystdex::octet = typedef void

在文件 ydef.h 第 1294 行定义.

## ◆ optional_function

template<typename _fSig >

using ystdex::optional_function = typedef function_base<function_traits<_fSig, empty_function_policy::no_effect>, _fSig>

在文件 function.hpp 第 889 行定义.

## ◆ ordered_bitseg_traits

template<class _tTraits , size_t... _vSeq>

using ystdex::ordered_bitseg_traits = typedef nodep::ordered_bitseg_traits<_tTraits, _vSeq...>

自从
  build 834

在文件 bitseg.hpp 第 207 行定义.

## ◆ packed_task_t

template<typename _fCallable , typename... _tParams>

using ystdex::packed_task_t = typedef std::packaged_task<invoke_result_t<_fCallable, _tParams...>()>

自从
  build 358

在文件 future.hpp 第 90 行定义.

## ◆ parameter_of_t

template<size_t _vIdx, typename _fCallable >

using ystdex::parameter_of_t = typedef _t<parameter_of<_vIdx, _fCallable> >

自从
  build 447

在文件 function.hpp 第 366 行定义.

## ◆ placement_ptr

template<typename _type , typename _tPointer = _type*>

using ystdex::placement_ptr = typedef std::unique_ptr<_type, placement_delete<_type, _tPointer> >

独占放置存储的对象所有权的指针。

在文件 placement.hpp 第 772 行定义.

## ◆ ptrdiff_t_

template<ptrdiff_t _vInt>

using ystdex::ptrdiff_t_ = typedef integral_constant< ptrdiff_t , _vInt>

在文件 integral_constant.hpp 第 104 行定义.

## ◆ pun_ptr

template<typename _type >

using ystdex::pun_ptr = typedef placement_ptr<decay_t<_type> >

避免严格别名分析限制的缓冲独占所有权指针。

自从
  build 716

在文件 type_pun.hpp 第 273 行定义.

## ◆ range_const_iterator_t

template<typename _tRange >

using ystdex::range_const_iterator_t = typedef decltype(ystdex::cbegin(std::declval<const _tRange&>()))

在文件 range.hpp 第 670 行定义.

## ◆ rebind_traits_t

template<class _tAlloc , typename _type >

using ystdex::rebind_traits_t = typedef typename allocator_traits<_tAlloc>::template rebind_traits<_type>

在文件 allocator.hpp 第 426 行定义.

## ◆ remove_cvref_t

template<typename _type >

using ystdex::remove_cvref_t = typedef _t<remove_cvref<_type> >

自从
  build 833

在文件 meta.hpp 第 236 行定义.

## ◆ return_of_t

template<typename _fCallable >

using ystdex::return_of_t = typedef _t<return_of<_fCallable> >

自从
  build 447

在文件 function.hpp 第 349 行定义.

## ◆ same_value_as

template<typename _tInt , _tInt _vDefault, _tInt... _values>

using ystdex::same_value_as = typedef is_same<integer_sequence<_tInt, _vDefault, _values...>, integer_sequence<_tInt, _values..., _vDefault> >

判断是否具有相同的指定值。

自从
  build 651

在文件 integer_sequence.hpp 第 280 行定义.

## ◆ second_t

template<typename _type >

using ystdex::second_t = typedef decltype(std::declval<_type>().second)

在文件 type_traits.hpp 第 108 行定义.

## ◆ short_

template<short _vInt>

using ystdex::short_ = typedef integral_constant< short , _vInt>

在文件 integral_constant.hpp 第 98 行定义.

## ◆ size_t_

template<size_t _vInt>

using ystdex::size_t_ = typedef integral_constant< size_t , _vInt>

在文件 integral_constant.hpp 第 103 行定义.

## ◆ sizeof_t

template<typename _type >

using ystdex::sizeof_t = typedef size_t_<sizeof(_type)>

自从
  build 843

在文件 meta.hpp 第 827 行定义.

## ◆ stream_str_t

template<class _tStream >

using ystdex::stream_str_t = typedef decltype(std::declval<_tStream&>().str())

自从
  build 833

在文件 string.hpp 第 1796 行定义.

## ◆ subscript_t

template<typename _type , typename _type2 >

using ystdex::subscript_t = typedef decltype(std::declval<_type>()[std::declval<_type2>()])

在文件 type_traits.hpp 第 92 行定义.

## ◆ swap_guard

template<typename _type , typename _tCond = bool, typename _tReference = _type&>

using ystdex::swap_guard = typedef state_guard<_type, _tCond, _tReference>

使用 ystdex::vswap 调用暂存对象的作用域守卫。

自从
  build 569

待办事项:

  支持分配器。

  支持有限的复制和转移。

在文件 scope_guard.hpp 第 372 行定义.

## ◆ tidy_ptr

template<typename _type >

using ystdex::tidy_ptr = typedef nptr<observer_ptr<_type> >

自从
  build 755

在文件 pointer.hpp 第 415 行定义.

## ◆ true_

using ystdex::true_ = typedef bool_<true>

在文件 integral_constant.hpp 第 109 行定义.

## ◆ tstring_view

using ystdex::tstring_view = typedef basic_tstring_view<char>

在文件 tstring_view.hpp 第 292 行定义.

## ◆ u16tstring_view

using ystdex::u16tstring_view = typedef basic_tstring_view<char16_t>

在文件 tstring_view.hpp 第 293 行定义.

## ◆ u32tstring_view

using ystdex::u32tstring_view = typedef basic_tstring_view<char32_t>

在文件 tstring_view.hpp 第 294 行定义.

## ◆ uchar_t

using ystdex::uchar_t = typedef cond_t<is_trivially_replaceable<wchar_t, char16_t>, char16_t, cond_t<is_trivially_replaceable<wchar_t, char32_t>, char32_t, void> >

指定和 `wchar_t` 互相替换存储的非 `char` 内建字符类型。

警告
  不同类型的非空字符的值是否可以替换取决于实现定义。

注解
  若存在这样的类型，为 `char16_t` 或 `char32_t` 之一，否则为 `void` 。

在文件 cstring.h 第 117 行定义.

## ◆ uint_

template<unsigned _vInt>

using ystdex::uint_ = typedef integral_constant< unsigned , _vInt>

在文件 integral_constant.hpp 第 101 行定义.

## ◆ ullong_

template<unsigned long long _vInt>

using ystdex::ullong_ = typedef integral_constant< unsigned long long , _vInt>

在文件 integral_constant.hpp 第 99 行定义.

## ◆ ulong_

template<unsigned long _vInt>

using ystdex::ulong_ = typedef integral_constant< unsigned long , _vInt>

在文件 integral_constant.hpp 第 100 行定义.

## ◆ unchecked_function

template<typename _fSig >

using ystdex::unchecked_function = typedef function_base<function_traits<_fSig, empty_function_policy::no_check>, _fSig>

自从
  build 849

在文件 function.hpp 第 885 行定义.

## ◆ unique_file_ptr

using ystdex::unique_file_ptr = typedef std::unique_ptr<std::FILE, decltype(std::fclose)&>

独占所有权的 C 标准库流指针或实现提供的等价类型。

注解
  POSIX 管道流可使用函数实现的 `::pclose` 代替 std::fclose 。

自从
  build 566

在文件 ystdex/cstdio.h 第 83 行定义.

## ◆ unique_ptr_pointer

template<typename _type , class _tDeleter >

using ystdex::unique_ptr_pointer = typedef detected_or_t<_type*, deleter_member_pointer_t, _tDeleter>

取 unique_ptr 包装的指针类型。

在文件 memory.hpp 第 400 行定义.

## ◆ unlock_delete

template<class _tMutex = std::mutex, class _tLock = std::unique_lock<_tMutex>>

using ystdex::unlock_delete = typedef threading::unlock_delete<_tMutex, _tLock>

解锁删除器：默认使用标准库互斥量和锁。

参见
  threading::unlock_delete

自从
  build 590

在文件 concurrency.h 第 51 行定义.

## ◆ unwrap_ref_decay_t

template<typename _type >

using ystdex::unwrap_ref_decay_t = typedef _t<unwrap_ref_decay<_type> >

在文件 ref.hpp 第 203 行定义.

## ◆ unwrap_reference_t

template<typename _type >

using ystdex::unwrap_reference_t = typedef _t<unwrap_reference<_type> >

在文件 ref.hpp 第 180 行定义.

## ◆ ushort_

template<unsigned short _vInt>

using ystdex::ushort_ = typedef integral_constant< unsigned short , _vInt>

在文件 integral_constant.hpp 第 102 行定义.

## ◆ well_formed_t

template<typename _type , typename... _types>

using ystdex::well_formed_t = typedef typename always<_type>::template apply<_types...>::type

void_t 的一般化，可指定别名类型。

参见
  CWG 1558 。
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59204 。
  https://stackoverflow.com/questions/31907885/void-t-fails-on-visual-studio-2015 。

自从
  build 688

在文件 meta.hpp 第 275 行定义.

## ◆ when_valid

template<typename... _types>

using ystdex::when_valid = typedef well_formed_t<when<true>, _types...>

类似 void_t 的元函数，但具有较低匹配优先级，避免偏特化歧义。

参见
  void_t

自从
  build 688

在文件 meta.hpp 第 313 行定义.

## ◆ wmembuf

using ystdex::wmembuf = typedef basic_membuf<wchar_t>

在文件 streambuf.hpp 第 137 行定义.

## ◆ wrapped_enum_traits_t

template<typename _type >

using ystdex::wrapped_enum_traits_t = typedef _t<wrapped_enum_traits<_type> >

在文件 enum.hpp 第 54 行定义.

## ◆ wtstring_view

using ystdex::wtstring_view = typedef basic_tstring_view<wchar_t>

在文件 tstring_view.hpp 第 295 行定义.

## 枚举类型说明

## ◆ byte_order

enum ystdex::byte_order

strong

字节序。

待办事项:
  使用单独的头文件。

自从
  build 594

枚举值
unknown |
neutral |
little |
big |
PDP |

在文件 cstdint.hpp 第 47 行定义.

## ◆ empty_function_policy

enum ystdex::empty_function_policy

strong

空函数策略。

自从
  build 849

枚举值
no_check | 调用空值行为未定义。
no_effect | 调用空值无作用。
throwing | 调用空值抛出 std::bad_function_call 。

在文件 function.hpp 第 454 行定义.

## ◆ path_category

enum ystdex::path_category : size_t

strong

路径类别。

自从
  build 543

枚举值
empty |
self |
parent |
node |

在文件 path.hpp 第 193 行定义.

## 函数说明

## ◆ addressof() [1/3]

template<typename _type >

enable_if_t<has_no_overloaded_addressof<_type>::value, _type*> ystdex::addressof | ( | _type & | r | ) |

inline

尝试对非重载 operator& 提供 constexpr 的 std::addressof 替代。

自从
  build 831

参见
  LWG 2296 。
  https://reviews.llvm.org/rL186053 。

提供和 ISO C++17 的 std::addressof 尽可能相同的接口。 在 ISO C++17 前， constexpr 需要扩展支持。 返回值的 nodiscard 标记是类似 P0600R1 理由的兼容扩展。 Microsoft VC++ 15.7.5 也使用 [[nodiscard]] 。

自从
  build 833

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

引用了 YSLib::Drawing::r.

被这些函数引用 ystdex::standard_layout_storage< aligned_storage_t< sizeof(_type), std::alignment_of< _type >::value > >::access(), YSLib::AccessNodePtr(), YSLib::UI::TextPlaceholder::BindByFocus(), construct_default_within(), construct_within(), ystdex::cpp2017::destroy(), ystdex::cpp2017::destroy_n(), ystdex::any::do_alloc_init_impl(), YSLib::ValueObject::Equals(), ystdex::any_ops::value_holder< _type >::get(), get_nested_exception_ptr(), ystdex::any_ops::value_handler< _tHolder >::get_pointer(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::get_pointer(), ystdex::any_ops::ref_handler< _type >::init(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::manage(), ystdex::details::list_rep< _type, std::allocator< _type > >::merge(), ystdex::addressof_op<>::operator()(), ystdex::addressof_op< void >::operator()(), ystdex::is_equal::operator()(), ystdex::cpp2017::reverse_iterator< _tIter >::operator->(), ystdex::cpp2017::optional< _tNodeAlloc >::operator->(), ystdex::details::list_rep< _type, std::allocator< _type > >::operator=(), ystdex::dep_ops::indexable< _type, _type2, _type3, _tOpt >::operator[](), polymorphic_crosscast(), polymorphic_downcast(), ystdex::details::list_rep< _type, std::allocator< _type > >::splice(), swap_volatile(), to_array(), NPL::TryAccessLeaf(), write(), write_literal() , 以及 ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tValue >::ator_del::~ator_del().

这是这个函数的调用关系图:

## ◆ addressof() [2/3]

template<typename _type , typename = enable_if_t<!has_no_overloaded_addressof<_type>::value>>

_type* ystdex::addressof | ( | _type & | r | ) |

inline

注解
  因为可移植性需要，不能直接提供 constexpr 。

警告
  ISO C++17 前无 constexpr 支持。

在文件 addressof.hpp 第 142 行定义.

引用了 addressof() , 以及 YSLib::Drawing::r.

函数调用图:

## ◆ addressof() [3/3]

template<class _type >

const _type* ystdex::addressof | ( | const _type && |  | ) |

delete

参见
  LWG 2598 。

被这些函数引用 addressof() , 以及 pvoid_ref().

这是这个函数的调用关系图:

## ◆ aligned_cast()

template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_compatible<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>

auto ystdex::aligned_cast | ( | _tSrc && | v | ) | -> decltype(std::forward<decltype( reinterpret_cast<_rDst>(v) )>( reinterpret_cast<_rDst>(v) ))

inline

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

## ◆ aligned_replace_cast() [1/2]

template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_replaceable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>

auto ystdex::aligned_replace_cast | ( | _tSrc && | v | ) | -> decltype(std::forward<decltype( reinterpret_cast<_rDst>(v) )>( reinterpret_cast<_rDst>(v) ))

inline

在文件 type_pun.hpp 第 187 行定义.

引用了 v , 以及 yforward.

## ◆ aligned_replace_cast() [2/2]

template<typename _pDst , typename _tSrc >

enable_if_t<and_<is_object_pointer<_pDst>, is_aligned_replaceable<_tSrc, remove_pointer_t<_pDst> > >::value, _pDst> ystdex::aligned_replace_cast | ( | _tSrc * | v | ) |

inline

保证对齐替换存储的显式转换。

注解
  用于替代针对满足 is_aligned_replaceable 要求对象的 `reinterpret_cast` 。

在文件 type_pun.hpp 第 179 行定义.

引用了 v.

## ◆ aligned_store_cast() [1/2]

template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_aligned_storable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>

auto ystdex::aligned_store_cast | ( | _tSrc && | v | ) | -> decltype(std::forward<decltype( reinterpret_cast<_rDst>(v) )>( reinterpret_cast<_rDst>(v) ))

inline

在文件 type_pun.hpp 第 163 行定义.

引用了 v , 以及 yforward.

## ◆ aligned_store_cast() [2/2]

template<typename _pDst , typename _tSrc >

enable_if_t<and_<is_object_pointer<_pDst>, is_aligned_storable<_tSrc, remove_pointer_t<_pDst> > >::value, _pDst> ystdex::aligned_store_cast | ( | _tSrc * | v | ) |

inline

保证对齐存储的显式转换。

注解
  用于替代针对满足 is_aligned_storable 要求对象的 `reinterpret_cast` 。

在文件 type_pun.hpp 第 155 行定义.

## ◆ alloc_on_copy() [1/2]

template<typename _tAlloc >

void ystdex::alloc_on_copy | ( | _tAlloc & | x,
|  | const _tAlloc & | y
| ) |  |

inline

按分配器特征在传播容器时复制赋值分配器。

自从
  build 830

在文件 allocator.hpp 第 1017 行定义.

引用了 ystdex::details::do_alloc_on_copy(), x , 以及 YSLib::UI::y.

被这些函数引用 ystdex::details::list_rep< _type, std::allocator< _type > >::operator=() , 以及 ystdex::details::rb_tree::tree< key_type, value_type, first_of<>, key_compare, allocator_type >::operator=().

函数调用图:
这是这个函数的调用关系图:

## ◆ alloc_on_copy() [2/2]

template<typename _tAlloc >

_tAlloc ystdex::alloc_on_copy | ( | const _tAlloc & | a | ) |

inline

按分配器特征在传播容器时复制分配器。

自从
  build 830

在文件 allocator.hpp 第 1028 行定义.

引用了 YSLib::a.

## ◆ alloc_on_move()

template<typename _tAlloc >

void ystdex::alloc_on_move | ( | _tAlloc & | x,
|  | _tAlloc & | y
| ) |  |

inline

按分配器特征在传播容器时转移分配器。

在文件 allocator.hpp 第 1038 行定义.

引用了 ystdex::details::do_alloc_on_move(), x , 以及 YSLib::UI::y.

被这些函数引用 ystdex::details::list_rep< _type, std::allocator< _type > >::move_assign_elements() , 以及 ystdex::details::rb_tree::tree< key_type, value_type, first_of<>, key_compare, allocator_type >::move_assign_elements().

函数调用图:
这是这个函数的调用关系图:

## ◆ alloc_on_swap()

template<typename _tAlloc >

void ystdex::alloc_on_swap | ( | _tAlloc & | x,
|  | _tAlloc & | y
| ) |  |

inline

按分配器特征在传播容器时交换分配器。

在文件 allocator.hpp 第 1050 行定义.

引用了 ystdex::details::do_alloc_on_swap(), x , 以及 YSLib::UI::y.

函数调用图:

## ◆ allocate_shared() [1/2]

template<typename _type , class _tAlloc , typename... _tParams>

std::shared_ptr<_type> ystdex::allocate_shared | ( | const _tAlloc & | alloc,
|  | _tParams &&... | args
| ) |  |

使用分配器创建 std::shared_ptr 。

注解
  仅实现 WG21 P0674R1 和 ISO C++17 的交集，类似 libstdc++ 。

参见
  LWG 2070 。
  https://developercommunity.visualstudio.com/content/problem/417142/lwg-2070p0674r1-stdallocate-shared-is-not-conformi.html

自从
  build 849

待办事项:

  实现 WG21 P0674R1 。

  在 ISO C++20 出版后更新 __cplusplus 的值。

在文件 allocator.hpp 第 949 行定义.

引用了 alloc, CHRLib::args , 以及 yforward.

被这些函数引用 NPL::A1::Forms::MakeEncapsulationType().

这是这个函数的调用关系图:

## ◆ allocate_shared() [2/2]

template<typename _type , class _tAlloc , typename _tValue >

std::shared_ptr<_type> ystdex::allocate_shared | ( | const _tAlloc & | alloc,
|  | std::initializer_list< _tValue > | il
| ) |  |

使用分配器和初始化列表参数创建 std::shared_ptr 。

自从
  build 851

在文件 allocator.hpp 第 961 行定义.

引用了 alloc.

## ◆ allocate_unique() [1/2]

template<typename _type , class _tAlloc , typename... _tParams>

auto ystdex::allocate_unique | ( | const _tAlloc & | alloc,
|  | _tParams &&... | args
| ) |  | -> std::unique_ptr<_type, allocator_delete<rebind_alloc_t<_tAlloc, _type>>>

使用分配器创建 std::unique_ptr 。

参见
  WG21 P0316R0 。

自从
  build 847

在文件 allocator.hpp 第 912 行定义.

引用了 YSLib::a, alloc, CHRLib::args , 以及 yforward.

## ◆ allocate_unique() [2/2]

template<typename _type , class _tAlloc , typename _tValue >

auto ystdex::allocate_unique | ( | const _tAlloc & | alloc,
|  | std::initializer_list< _tValue > | il
| ) |  | -> std::unique_ptr<_type, allocator_delete<rebind_alloc_t<_tAlloc, _type>>>

使用分配器和初始化列表参数创建 std::unique_ptr 。

自从
  build 851

在文件 allocator.hpp 第 925 行定义.

引用了 YSLib::a , 以及 alloc.

## ◆ alph()

template<class _tString >

_tString ystdex::alph | ( | _tString & | str | ) |

取字母表：有序的字符串的不重复序列。

自从
  build 414

在文件 string.hpp 第 1303 行定义.

引用了 YSLib::IO::_tString, sort_unique() , 以及 YSLib::Text::str.

函数调用图:

## ◆ any_cast() [1/5]

template<typename _type >

_type ystdex::any_cast | ( | any && | x | ) |

自从
  build 671

在文件 any.h 第 2266 行定义.

引用了 platform::p , 以及 x.

## ◆ any_cast() [2/5]

template<typename _type >

_type ystdex::any_cast | ( | any & | x | ) |

动态泛型转换。

注解
  存储对象类型通过 `ystdex::type_id` 取动态类型并比较结果相等判断。

自从
  build 671

待办事项:
  检验特定实现环境（如使用动态库时）比较 std::type_info::name() 的必要性。

异常

  YStandardEx | 扩展：异常中立：由持有者抛出。
  bad_any_cast | 当 `x.type() != ystdex::type_id<remove_reference_t<_type>>()` 。

注解
  LWG 2509 已被 LWG 2769 的解覆盖。

参见
  LWG 2768 。
  LWG 2769 。

在文件 any.h 第 2241 行定义.

引用了 platform::p , 以及 x.

## ◆ any_cast() [3/5]

template<typename _type >

_type* ystdex::any_cast | ( | any * | p | ) |

inline

返回
  若参数非空指针且类型和模板参数一致，为储存的非空对象指针；否则为空指针。

在文件 any.h 第 2281 行定义.

引用了 platform::p.

## ◆ any_cast() [4/5]

template<typename _type >

_type ystdex::any_cast | ( | const any & | x | ) |

在文件 any.h 第 2253 行定义.

引用了 platform::p , 以及 x.

## ◆ any_cast() [5/5]

template<typename _type >

const _type* ystdex::any_cast | ( | const any * | p | ) |

inline

在文件 any.h 第 2287 行定义.

引用了 platform::p.

## ◆ assign() [1/2]

template<class _tCon , typename... _tParams>

void ystdex::assign | ( | _tCon & | con,
|  | _tParams &&... | args
| ) |  |

inline

插入参数指定的元素到容器。

自从
  build 274

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

引用了 CHRLib::args , 以及 yforward.

被这些函数引用 ystdex::cpp2017::basic_string< char >::assign(), ystdex::details::optional_base< _type, bool >::operator=(), ystdex::details::optional_base< _type, true >::operator=() , 以及 YSLib::Text::VerifyEncoding().

这是这个函数的调用关系图:

## ◆ assign() [2/2]

template<class _tCon , typename _type , size_t _vN>

void ystdex::assign | ( | _tCon & | con,
|  | const _type(&) | arr[_vN]
| ) |  |

inline

在文件 container.hpp 第 156 行定义.

## ◆ begins_with() [1/2]

template<typename _tRange1 , typename _tRange2 >

bool ystdex::begins_with | ( | const _tRange1 & | input,
|  | const _tRange2 & | test
| ) |  |

inline

自从
  build 519

在文件 string.hpp 第 1185 行定义.

引用了 begins_with().

函数调用图:

## ◆ begins_with() [2/2]

template<typename _tRange1 , typename _tRange2 , typename _fPred >

bool ystdex::begins_with | ( | const _tRange1 & | input,
|  | const _tRange2 & | test,
|  | _fPred | comp
| ) |  |

判断第一参数指定的串是否以第二参数起始。

注解
  使用 ADL string_begin 和 string_end 指定范围迭代器。
  除 ADL 外接口同 Boost.StringAlgo 。

参见
  ystdex::string_begin, ystdex::string_end

自从
  build 450
  build 519

在文件 string.hpp 第 1176 行定义.

引用了 ystdex::cpp2014::equal(), string_begin(), string_end() , 以及 string_length().

被这些函数引用 begins_with(), NPL::A1::BindParameter(), filter_prefix(), NPL::A1::Forms::LoadModule_SHBuild() , 以及 main().

函数调用图:
这是这个函数的调用关系图:

## ◆ bind1() [1/2]

template<typename _func , typename... _tParams>

auto ystdex::bind1 | ( | _func && | f,
|  | _tParams &&... | args
| ) |  | -> decltype( std::bind(std::forward<decltype( f )>( f ), std::placeholders::_1, std::forward<decltype( args )>( args )...))

inline

复合调用 std::bind 和 std::placeholders::_1 。

注解
  ISO C++ 要求 std::placeholders::_1 被实现支持。

自从
  build 628

在文件 functional.hpp 第 53 行定义.

引用了 CHRLib::args, CHRLib::f() , 以及 yforward.

被这些函数引用 YReader::ShlTextReader::BaseSession::BaseSession(), bind_forward(), NPL::A1::Forms::CallBinaryFold(), YSLib::UI::MLinearUIContainer::Contains(), YSLib::UI::MLinearUIContainer::operator-=(), NPL::A1::ReduceChildren() , 以及 YReader::TextInfoBox::Refresh().

函数调用图:
这是这个函数的调用关系图:

## ◆ bind1() [2/2]

template<typename _tRes , typename _func , typename... _tParams>

auto ystdex::bind1 | ( | _func && | f,
|  | _tParams &&... | args
| ) |  | -> decltype( std::bind<_tRes>(std::forward<decltype( f )>( f ), std::placeholders::_1, std::forward<decltype( args )>( args )...))

inline

自从
  build 653

在文件 functional.hpp 第 61 行定义.

引用了 CHRLib::args, CHRLib::f() , 以及 yforward.

函数调用图:

## ◆ bind_forward()

template<typename _func , typename _func2 , typename... _tParams>

auto ystdex::bind_forward | ( | _func && | f,
|  | _func2 && | f2,
|  | _tParams &&... | args
| ) |  | -> decltype(ystdex::bind1(std::forward<decltype( f )>( f ), std::bind(std::forward<decltype( f2 )>( f2 ), std::placeholders::_2, std::forward<decltype( args )>( args )...)))

inline

复合调用 ystdex::bind1 和 std::placeholders::_2 以实现值的设置。

注解
  从右到左逐个应用参数。
  ISO C++ 要求 std::placeholders::_2 被实现支持。

自从
  build 651

在文件 functional.hpp 第 77 行定义.

引用了 CHRLib::args, bind1(), CHRLib::f() , 以及 yforward.

函数调用图:

## ◆ cache_lookup()

template<class _tMap , typename _tKey , typename _func , typename... _tParams>

auto ystdex::cache_lookup | ( | _tMap & | cache,
|  | const _tKey & | key,
|  | _func | init,
|  | _tParams &&... | args
| ) |  | -> decltype((cache.begin()->second))

以指定的关键字查找作为缓存的无序关联容器， 若没有找到使用指定的可调用对象和参数初始化内容。

模板参数

  _tMap | 映射类型，可以是 std::map 、 std::unordered_map 或 ystdex::used_list_cache 等。

自从
  build 521

在文件 cache.hpp 第 380 行定义.

引用了 CHRLib::args, YSLib::i, YB_UNLIKELY , 以及 yforward.

被这些函数引用 YSLib::Drawing::ZoomedImageCache::Lookup() , 以及 YSLib::Drawing::Typeface::LookupBitmap().

这是这个函数的调用关系图:

## ◆ call_nonnull_or() [1/3]

template<typename _type , typename _func >

auto ystdex::call_nonnull_or | ( | _func | f,
|  | _type && | p
| ) |  | -> decay_t<decltype(f(std::forward<decltype( p )>( p )))>

inline

调用非引用或默认值。

在文件 deref_op.hpp 第 101 行定义.

引用了 CHRLib::f(), platform::p , 以及 yforward.

函数调用图:

## ◆ call_nonnull_or() [2/3]

template<typename _tOther , typename _type , typename _func >

auto ystdex::call_nonnull_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other
| ) |  | -> decltype(p ? f(std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 107 行定义.

引用了 CHRLib::f(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ call_nonnull_or() [3/3]

template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>

auto ystdex::call_nonnull_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other,
|  | _tSentinal && | last
| ) |  | -> decltype(!bool(p == std::forward<decltype( last )>( last )) ? f(std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 115 行定义.

引用了 platform::bool, CHRLib::f(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ call_value_or() [1/3]

template<typename _type , typename _func >

auto ystdex::call_value_or | ( | _func | f,
|  | _type && | p
| ) |  | -> decay_t<decltype(f(*std::forward<decltype( p )>( p )))>

inline

调用非空值或取默认值。

在文件 deref_op.hpp 第 152 行定义.

引用了 CHRLib::f(), platform::p , 以及 yforward.

被这些函数引用 NPL::SXML::ConvertStringNode(), NPL::DecomposeMakefileDepList(), fexists(), get_nested_exception_ptr(), YSLib::Drawing::FontCache::GetTypefacePtr(), YSLib::GetValuePtrOf(), NPL::IsUncollapsedTerm(), NPL::A1::QuerySourceInformation(), NPL::A1::ReduceLeafToken(), NPL::TermToTags() , 以及 platform::ufexists().

函数调用图:
这是这个函数的调用关系图:

## ◆ call_value_or() [2/3]

template<typename _tOther , typename _type , typename _func >

auto ystdex::call_value_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other
| ) |  | -> decltype(p ? f(*std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 158 行定义.

引用了 CHRLib::f(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ call_value_or() [3/3]

template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>

auto ystdex::call_value_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other,
|  | _tSentinal && | last
| ) |  | -> decltype(!bool(p == std::forward<decltype( last )>( last )) ? f(*std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 166 行定义.

引用了 platform::bool, CHRLib::f(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ cast_array()

template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::cast_array | ( | _tParams &&... | args | ) |

inline

构造指定参数转换初始化的 std::array 对象。

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

引用了 CHRLib::args , 以及 decay_copy().

函数调用图:

## ◆ cast_mutable() [1/2]

template<class _tCon , typename _type >

std::pair<typename _tCon::iterator, _type> ystdex::cast_mutable | ( | _tCon & | con,
|  | const std::pair< typename _tCon::const_iterator, _type > & | pr
| ) |  |

inline

在文件 container.hpp 第 630 行定义.

引用了 cast_mutable().

函数调用图:

## ◆ cast_mutable() [2/2]

template<class _tCon >

_tCon::iterator ystdex::cast_mutable | ( | _tCon & | con,
|  | typename _tCon::const_iterator | i
| ) |  |

inline

移除 const_iterator 的 const 限定。

自从
  build 680

在文件 container.hpp 第 624 行定义.

引用了 YSLib::i.

被这些函数引用 cast_mutable(), search_map() , 以及 search_map_by().

这是这个函数的调用关系图:

## ◆ ceiling_lb()

size_t ystdex::ceiling_lb | ( | std::uintmax_t | n | ) |

inline

计算 2 为底数的无符号整数向上取整的的对数值。

前置条件
  `n > 1` 。

在文件 cstdint.hpp 第 453 行定义.

引用了 ystdex::details::floor_lb().

被这些函数引用 ystdex::pmr::adjust_pool_options().

函数调用图:
这是这个函数的调用关系图:

## ◆ chain_apply() [1/2]

template<typename _func >

void ystdex::chain_apply | ( | _func && | f | ) |

inline

顺序链式调用。

参见
  关于调用参数类型： ISO C++11 30.3.1.2 [thread.thread.constr] 。

在文件 function.hpp 第 279 行定义.

引用了 CHRLib::f() , 以及 yforward.

被这些函数引用 chain_apply().

函数调用图:
这是这个函数的调用关系图:

## ◆ chain_apply() [2/2]

template<typename _func , typename _type , typename... _tParams>

void ystdex::chain_apply | ( | _func && | f,
|  | _type && | arg,
|  | _tParams &&... | args
| ) |  |

inline

在文件 function.hpp 第 285 行定义.

引用了 CHRLib::args, chain_apply(), CHRLib::f() , 以及 yforward.

函数调用图:

## ◆ clone_monomorphic() [1/2]

template<typename _type >

_type* ystdex::clone_monomorphic | ( | const _type & | v | ) |

inline

使用 new 复制对象。

自从
  build 746

在文件 memory.hpp 第 1145 行定义.

引用了 v.

被这些函数引用 clone_monomorphic_ptr().

这是这个函数的调用关系图:

## ◆ clone_monomorphic() [2/2]

template<typename _type , class _tAlloc >

auto ystdex::clone_monomorphic | ( | const _type & | v,
|  | _tAlloc && | a
| ) |  | -> decltype(ystdex::create_with_allocator<_type>(std::forward<decltype( a )>( a ), v))

inline

使用分配器复制对象。

在文件 memory.hpp 第 1152 行定义.

引用了 YSLib::a, v , 以及 yforward.

## ◆ clone_monomorphic_ptr() [1/2]

template<typename _tPointer >

auto ystdex::clone_monomorphic_ptr | ( | const _tPointer & | p | ) | -> decltype(ystdex::clone_monomorphic(*p))

inline

若指针非空，使用 new 复制指针指向的对象。

在文件 memory.hpp 第 1161 行定义.

引用了 clone_monomorphic() , 以及 platform::p.

函数调用图:

## ◆ clone_monomorphic_ptr() [2/2]

template<typename _tPointer , class _tAlloc >

auto ystdex::clone_monomorphic_ptr | ( | const _tPointer & | p,
|  | _tAlloc && | a
| ) |  | -> decltype(ystdex::clone_monomorphic(*p, std::forward<decltype( a )>( a )))

inline

若指针非空，使用分配器复制指针指向的对象。

在文件 memory.hpp 第 1171 行定义.

引用了 YSLib::a, clone_monomorphic(), platform::p , 以及 yforward.

函数调用图:

## ◆ clone_polymorphic()

template<class _type >

auto ystdex::clone_polymorphic | ( | const _type & | v | ) | -> decltype(v.clone())

inline

使用 `clone` 成员函数复制多态类类型对象。

前置条件
  静态断言： `is_polymorphic<decltype(v)>()` 。

在文件 memory.hpp 第 1185 行定义.

引用了 v.

被这些函数引用 clone_polymorphic_ptr().

这是这个函数的调用关系图:

## ◆ clone_polymorphic_ptr()

template<class _tPointer >

auto ystdex::clone_polymorphic_ptr | ( | const _tPointer & | p | ) | -> decltype(clone_polymorphic(*p))

inline

若指针非空，使用 `clone` 成员函数复制指针指向的多态类类型对象。

在文件 memory.hpp 第 1195 行定义.

引用了 clone_polymorphic() , 以及 platform::p.

函数调用图:

## ◆ compose()

template<typename _func , typename _func2 , typename _func3 , typename... _funcs>

auto ystdex::compose | ( | _func | f,
|  | _func2 | g,
|  | _func3 | h,
|  | _funcs... | args
| ) |  | -> decltype(ystdex::compose(ystdex::compose(f, g), h, args...))

inline

自从
  build 731

在文件 functional.hpp 第 124 行定义.

引用了 CHRLib::args, CHRLib::f() , 以及 YSLib::Drawing::g.

被这些函数引用 NPL::A1::Forms::CallSystem(), fexists(), YSLib::GetValuePtrOf(), NPL::IsUncollapsedTerm(), NPL::Environment::LookupName(), main(), NPL::TermToTags() , 以及 platform::ufexists().

函数调用图:
这是这个函数的调用关系图:

## ◆ compose_n()

template<typename _func , typename _func2 , typename _func3 , typename... _funcs>

auto ystdex::compose_n | ( | _func | f,
|  | _func2 | g,
|  | _func3 | h,
|  | _funcs... | args
| ) |  | -> decltype(ystdex::compose_n(ystdex::compose_n(f, g), h, args...))

inline

在文件 functional.hpp 第 168 行定义.

引用了 CHRLib::args, CHRLib::f() , 以及 YSLib::Drawing::g.

被这些函数引用 NPL::ReferenceTermOp::ComposeReferencedTermOp() , 以及 main().

函数调用图:
这是这个函数的调用关系图:

## ◆ concat() [1/3]

template<class _tCon , typename _tIn >

void ystdex::concat | ( | _tCon & | con,
|  | _tIn | first,
|  | _tIn | last
| ) |  |

插入元素到容器末尾。

前置条件
  指定元素的范围和容器不重叠。

注解
  使用 ystdex::end 。

自从
  build 546

待办事项:
  返回非 `void` 。

在文件 container.hpp 第 173 行定义.

引用了 ystdex::cpp2017::end().

被这些函数引用 concat() , 以及 vector_concat().

函数调用图:
这是这个函数的调用关系图:

## ◆ concat() [2/3]

template<class _tCon , typename _tRange >

void ystdex::concat | ( | _tCon & | con,
|  | _tRange && | c
| ) |  |

在文件 container.hpp 第 180 行定义.

引用了 ystdex::cpp2017::begin(), CHRLib::c, ystdex::cpp2017::end() , 以及 yforward.

函数调用图:

## ◆ concat() [3/3]

template<class _tString >

void ystdex::concat | ( | _tString & | str,
|  | size_t | n
| ) |  |

重复串接。

参数

  str | 被串接的字符串的引用。
  n | 串接结果包含原字符串的重复次数。

前置条件
  断言： `1 < n` 。

自从
  build 414

待办事项:
  检查 reserve 。

在文件 string.hpp 第 1321 行定义.

引用了 concat(), YSLib::Text::str , 以及 yconstraint.

函数调用图:

## ◆ cond_prefix()

template<typename _type , typename _tString >

_tString ystdex::cond_prefix | ( | const _tString & | str,
|  | const _type & | prefix,
|  | _tString && | val = `{}`
| ) |  |

选择性过滤前缀。

返回
  指定前缀存在时为去除前缀的部分，否则为参数指定的替代值。

自从
  build 565

在文件 string.hpp 第 2084 行定义.

## ◆ const_ntctscmp() [1/2]

template<typename _tChar >

std::char_traits<_tChar>::int_type ystdex::const_ntctscmp | ( | const _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

inline

比较简单 NTCTS 。

注解
  语义同 std::basic_string<_tChar>::compare ，但忽略指定长度。

在文件 cstring.h 第 499 行定义.

引用了 is_null().

被这些函数引用 const_ntctscmp() , 以及 const_ntctsfind().

函数调用图:
这是这个函数的调用关系图:

## ◆ const_ntctscmp() [2/2]

template<typename _tChar >

std::char_traits<_tChar>::int_type ystdex::const_ntctscmp | ( | const _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

inline

比较不超过指定长度的简单 NTCTS 。

注解
  语义同 std::basic_string<_tChar>::compare 。

在文件 cstring.h 第 512 行定义.

引用了 const_ntctscmp() , 以及 is_null().

函数调用图:

## ◆ const_ntctscnt()

template<typename _tChar >

size_t ystdex::const_ntctscnt | ( | const _tChar * | s,
|  | _tChar | c
| ) |  |

inline

计算简单 NTCTS 中的指定字符数。

在文件 cstring.h 第 487 行定义.

引用了 CHRLib::c, is_null() , 以及 CHRLib::s.

函数调用图:

## ◆ const_ntctsfind() [1/3]

template<typename _tChar >

size_t ystdex::const_ntctsfind | ( | const _tChar * | s,
|  | _tChar | c
| ) |  |

inline

在简单 NTCTS 中顺序查找指定字符。

返回
  在查找结束时经过的字符数。

在文件 cstring.h 第 525 行定义.

引用了 CHRLib::c, is_null() , 以及 CHRLib::s.

被这些函数引用 const_ntctsfind().

函数调用图:
这是这个函数的调用关系图:

## ◆ const_ntctsfind() [2/3]

template<typename _tChar >

size_t ystdex::const_ntctsfind | ( | const _tChar * | s,
|  | _tChar | c,
|  | size_t | n
| ) |  |

inline

在简单 NTCTS 中顺序查找第指定次数出现的指定字符。

返回
  在查找结束时经过的字符数。

在文件 cstring.h 第 536 行定义.

引用了 CHRLib::c, const_ntctsfind(), is_null() , 以及 CHRLib::s.

函数调用图:

## ◆ const_ntctsfind() [3/3]

template<typename _tChar >

size_t ystdex::const_ntctsfind | ( | const _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

inline

在简单 NTCTS 中顺序查找作为子串的指定 NTCTS 。

返回
  在查找结束时经过的字符数。

在文件 cstring.h 第 548 行定义.

引用了 const_ntctscmp(), const_ntctsfind(), const_ntctslen() , 以及 is_null().

函数调用图:

## ◆ const_ntctslen()

template<typename _tChar >

size_t ystdex::const_ntctslen | ( | const _tChar * | s | ) |

inline

计算简单 NTCTS 长度。

注解
  语义同 std::char_traits<_tChar>::length 。

在文件 cstring.h 第 479 行定义.

引用了 is_null() , 以及 CHRLib::s.

被这些函数引用 const_ntctsfind().

函数调用图:
这是这个函数的调用关系图:

## ◆ const_pointer_cast() [1/2]

template<typename _tDst , typename _type >

std::unique_ptr<_tDst> ystdex::const_pointer_cast | ( | std::unique_ptr< _type > | p | ) |

在文件 memory.hpp 第 1126 行定义.

引用了 platform::p.

## ◆ const_pointer_cast() [2/2]

template<typename _tDst , typename _type , typename _tDeleter >

std::unique_ptr<_tDst, _tDeleter> ystdex::const_pointer_cast | ( | std::unique_ptr< _type, _tDeleter > | p | ) |

在文件 memory.hpp 第 1132 行定义.

引用了 platform::p.

## ◆ construct()

template<typename _tIter , typename... _tParams>

void ystdex::construct | ( | _tIter | i,
|  | _tParams &&... | args
| ) |  |

使用指定参数在迭代器指定的位置以指定参数初始化构造对象。

自从
  build 602

模板参数

  _tIter | 迭代器类型。
  _tParams | 用于构造对象的参数包类型。

参数

  args | 用于构造对象的参数包。

前置条件
  断言：指定范围末尾以外的迭代器满足 YB_VerifyIterator 。

参数

  i | 迭代器。

注解
  显式转换为 void* 指针以实现标准库算法 uninitialized_* 实现类似的语义。

参见
  libstdc++ 5 和 Microsoft VC++ 2013 标准库在命名空间 std 内对指针类型的实现： _Construct 模板。

在文件 placement.hpp 第 376 行定义.

引用了 CHRLib::args, YSLib::i, YB_VerifyIterator , 以及 yforward.

被这些函数引用 ystdex::details::optional_base< _type, true >::assign(), ystdex::default_init_allocator< _type, _tAlloc >::construct(), construct_range(), ystdex::cpp2017::optional< _tNodeAlloc >::emplace(), ystdex::cpp2017::optional< _tNodeAlloc >::operator=(), ystdex::cpp2017::optional< _tNodeAlloc >::swap(), uninitialized_construct(), uninitialized_construct_n(), ystdex::cpp2017::uninitialized_move(), ystdex::cpp2017::uninitialized_move_n() , 以及 ystdex::cpp2017::uninitialized_value_construct_n().

这是这个函数的调用关系图:

## ◆ construct_default()

template<typename _tIter >

void ystdex::construct_default | ( | _tIter | i | ) |

使用指定参数在迭代器指定的位置以默认初始化构造对象。

参数

  i | 迭代器。

自从
  build 716

在文件 placement.hpp 第 391 行定义.

引用了 YSLib::i , 以及 YB_VerifyIterator.

被这些函数引用 ystdex::cpp2017::uninitialized_default_construct() , 以及 ystdex::cpp2017::uninitialized_default_construct_n().

这是这个函数的调用关系图:

## ◆ construct_default_in()

template<typename _type >

void ystdex::construct_default_in | ( | _type & | obj | ) |

inline

以默认初始化原地构造。

模板参数

  _tParams | 用于构造对象的参数包类型。

参数

  args | 用于构造对象的参数包。

自从
  build 716

在文件 placement.hpp 第 339 行定义.

## ◆ construct_default_within()

template<typename _type , typename _tObj >

_type* ystdex::construct_default_within | ( | _tObj & | obj | ) |

inline

以默认初始化在对象中构造。

模板参数

  _type | 构造的对象类型。

参数

  obj | 构造的存储对象。

自从
  build 716

在文件 placement.hpp 第 311 行定义.

引用了 addressof().

被这些函数引用 make_pun_default().

函数调用图:
这是这个函数的调用关系图:

## ◆ construct_in()

template<typename _type , typename... _tParams>

void ystdex::construct_in | ( | _type & | obj,
|  | _tParams &&... | args
| ) |  |

inline

以值初始化原地构造。

模板参数

  _tParams | 用于构造对象的参数包类型。

参数

  args | 用于构造对象的参数包。

自从
  build 692

在文件 placement.hpp 第 352 行定义.

引用了 CHRLib::args , 以及 yforward.

被这些函数引用 ystdex::call_once_init< YSLib::GUIApplication::InitBlock, once_flag >::call_once_init() , 以及 ystdex::tagged_value< function< void(bool, _type &)>, _type >::construct().

这是这个函数的调用关系图:

## ◆ construct_range()

template<typename _tIter , typename... _tParams>

void ystdex::construct_range | ( | _tIter | first,
|  | _tIter | last,
|  | _tParams &&... | args
| ) |  |

使用指定的参数重复构造迭代器范围内的对象序列。

注解
  参数被传递的次数和构造的对象数相同。

在文件 placement.hpp 第 405 行定义.

引用了 CHRLib::args, construct() , 以及 yforward.

被这些函数引用 ystdex::cpp2017::uninitialized_value_construct().

函数调用图:
这是这个函数的调用关系图:

## ◆ construct_within()

template<typename _type , typename _tObj , typename... _tParams>

_type* ystdex::construct_within | ( | _tObj & | obj,
|  | _tParams &&... | args
| ) |  |

inline

以值初始化在对象中构造。

模板参数

  _tParams | 用于构造对象的参数包类型。

参数

  args | 用于构造对象的参数包。

在文件 placement.hpp 第 324 行定义.

引用了 addressof(), CHRLib::args , 以及 yforward.

被这些函数引用 make_pun().

函数调用图:
这是这个函数的调用关系图:

## ◆ copy_and_swap()

template<typename _type , typename _type2 = _type>

_type& ystdex::copy_and_swap | ( | _type & | obj,
|  | const _type2 & | new_val
| ) |  |

inline

复制对象并交换。

自从
  build 768

创建第二参数的对象副本，并和第一参数指定的对象交换。 可通过交换操作实现复制赋值操作符。

在文件 swap.hpp 第 514 行定义.

引用了 create_and_swap().

函数调用图:

## ◆ copy_or_move()

template<typename _type , typename _type2 = _type>

_type ystdex::copy_or_move | ( | bool | copy,
|  | _type & | obj
| ) |  |

inline

按参数复制或转移。

自从
  build 787

在文件 utility.hpp 第 96 行定义.

引用了 ystdex::cpp2017::as_const().

函数调用图:

## ◆ copy_when()

template<typename _tIn , typename _tOut , typename _fPred >

_tOut ystdex::copy_when | ( | _tIn | first,
|  | _tOut | result,
|  | _fPred | pred
| ) |  |

复制满足谓词的序列的连续元素。

在文件 algorithm.hpp 第 396 行定义.

引用了 transform_when(), v , 以及 ynothrow.

被这些函数引用 CHRLib::UCS2ToUCS4().

函数调用图:
这是这个函数的调用关系图:

## ◆ create_and_swap()

template<typename _type , typename... _tParams>

_type& ystdex::create_and_swap | ( | _type & | obj,
|  | _tParams &&... | args
| ) |  |

inline

创建对象并交换。

注解
  使用 ADL swap 或 ystdex_swap::swap 。

警告
  若交换使用赋值实现并重入调用，则调用的行为未定义。

参见
  ystdex::swap_dependent

自从
  build 879

直接初始化创建对象并交换。 转移赋值操作符的实现通常不需要创建对象，而可能直接使用交换操作。

在文件 swap.hpp 第 497 行定义.

引用了 CHRLib::args, swap_dependent() , 以及 yforward.

被这些函数引用 copy_and_swap().

函数调用图:
这是这个函数的调用关系图:

## ◆ create_or_throw()

template<typename _type , typename... _tParams>

_type ystdex::create_or_throw | ( | _tParams &&... | args | ) |

inline

调用构造函数创建对象或抛出异常。

异常

  invalid_construction | 初始化非合式。

注解
  第一模板参数决定创建对象的类型。

自从
  build 847

返回
  创建的对象。

异常

  ystdex::invalid_construction | 参数类型无法用于初始化持有者。

在文件 memory.hpp 第 120 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ create_or_throw_with_allocator()

template<typename _type , class _tAlloc , typename... _tParams>

_type* ystdex::create_or_throw_with_allocator | ( | _tAlloc && | a,
|  | _tParams &&... | args
| ) |  |

调用 ystdex::create_with_allocator 表达式创建对象或抛出异常。

在文件 memory.hpp 第 128 行定义.

引用了 YSLib::a, CHRLib::args , 以及 yforward.

## ◆ create_with_allocator()

template<typename _type , class _tAlloc , typename... _tParams>

auto ystdex::create_with_allocator | ( | _tAlloc && | a,
|  | _tParams &&... | args
| ) |  | -> std::unique_ptr<_type, allocator_delete<remove_cvref_t<_tAlloc>>>

使用分配器创建对象。

返回
  分配的对象指针。

自从
  build 849

在文件 allocator.hpp 第 893 行定义.

引用了 YSLib::a, CHRLib::args, ystdex::any_ops::construct(), make_allocator_guard() , 以及 yforward.

函数调用图:

## ◆ cref() [1/2]

template<class _type >

void ystdex::cref | ( | const _type && |  | ) |

delete

## ◆ cref() [2/2]

template<typename _type >

lref<const _type> ystdex::cref | ( | const _type & | t | ) |

inline

在文件 ref.hpp 第 130 行定义.

被这些函数引用 YSLib::Drawing::DrawCircle() , 以及 YSLib::Drawing::FillCircle().

这是这个函数的调用关系图:

## ◆ cube()

template<typename _type >

_type ystdex::cube | ( | _type | x | ) |

inline

计算立方。

在文件 rational.hpp 第 107 行定义.

引用了 x.

## ◆ delta_assign()

template<bool _bIsPositive, typename _tScalar1 , typename _tScalar2 >

_tScalar1& ystdex::delta_assign | ( | _tScalar1 & | _x,
|  | _tScalar2 & | _y
| ) |  |

inline

选择加法/减法复合赋值运算。

自从
  build 284

在文件 functor.hpp 第 552 行定义.

## ◆ destruct()

template<typename _tIter >

void ystdex::destruct | ( | _tIter | i | ) |

析构迭代器指向的对象。

参数

  i | 迭代器。

前置条件
  断言：满足 YB_VerifyIterator 。

参见
  destroy

在文件 placement.hpp 第 506 行定义.

引用了 YSLib::i , 以及 YB_VerifyIterator.

被这些函数引用 destruct_range().

这是这个函数的调用关系图:

## ◆ destruct_in()

template<typename _type >

void ystdex::destruct_in | ( | _type & | obj | ) |

inline

原地析构。

模板参数

  _type | 用于析构对象的类型。

参数

  obj | 析构的对象。

自从
  build 693

参见
  destroy_at

在文件 placement.hpp 第 488 行定义.

被这些函数引用 ystdex::standard_layout_storage< aligned_storage_t< sizeof(_type), std::alignment_of< _type >::value > >::destroy(), ystdex::tagged_value< function< void(bool, _type &)>, _type >::destroy() , 以及 ystdex::pmr::resource_pool::chunk_t::~chunk_t().

这是这个函数的调用关系图:

## ◆ destruct_range()

template<typename _tIter >

void ystdex::destruct_range | ( | _tIter | first,
|  | _tIter | last
| ) |  |

inline

析构d迭代器范围内的对象序列。

注解
  保证顺序析构。

参见
  destroy

在文件 placement.hpp 第 521 行定义.

引用了 destruct().

函数调用图:

## ◆ dismiss() [1/3]

template<class _type >

auto ystdex::dismiss | ( | _type & | gd | ) | -> decltype(gd.dismiss())

inline

解除操作。

自从
  build 702

使用成员 `dismiss` 。

在文件 scope_guard.hpp 第 138 行定义.

被这些函数引用 ystdex::pmr::oversized_map::allocate() , 以及 dismiss().

这是这个函数的调用关系图:

## ◆ dismiss() [2/3]

template<typename _func , typename _tRes , typename _tState >

void ystdex::dismiss | ( | const one_shot< _func, _tRes, _tState > & | gd | ) |

inline

在文件 scope_guard.hpp 第 144 行定义.

引用了 ystdex::one_shot< _func, _tRes, _tState >::fresh.

## ◆ dismiss() [3/3]

template<typename _func , bool _bNoThrow>

auto ystdex::dismiss | ( | guard< _func, _bNoThrow > & | gd | ) | -> decltype(dismiss(gd.func))

inline

使用 ADL dismiss 。

在文件 scope_guard.hpp 第 151 行定义.

引用了 dismiss().

函数调用图:

## ◆ dynamic_pointer_cast() [1/4]

template<typename _tDst , typename _type >

std::unique_ptr<_tDst> ystdex::dynamic_pointer_cast | ( | std::unique_ptr< _type > && | p | ) |

inline

在文件 memory.hpp 第 1102 行定义.

引用了 platform::p.

## ◆ dynamic_pointer_cast() [2/4]

template<typename _tDst , typename _type >

std::unique_ptr<_tDst> ystdex::dynamic_pointer_cast | ( | std::unique_ptr< _type > & | p | ) |

在文件 memory.hpp 第 1091 行定义.

引用了 platform::p.

## ◆ dynamic_pointer_cast() [3/4]

template<typename _tDst , typename _type , typename _tDeleter >

std::unique_ptr<_tDst, _tDeleter> ystdex::dynamic_pointer_cast | ( | std::unique_ptr< _type, _tDeleter > && | p | ) |

inline

在文件 memory.hpp 第 1119 行定义.

引用了 platform::p.

## ◆ dynamic_pointer_cast() [4/4]

template<typename _tDst , typename _type , typename _tDeleter >

std::unique_ptr<_tDst, _tDeleter> ystdex::dynamic_pointer_cast | ( | std::unique_ptr< _type, _tDeleter > & | p | ) |

在文件 memory.hpp 第 1108 行定义.

引用了 platform::p.

## ◆ emplace_hint_in_place()

template<class _tAssocCon , typename _tKey , typename... _tParams>

auto ystdex::emplace_hint_in_place | ( | _tAssocCon & | con,
|  | typename _tAssocCon::const_iterator | hint,
|  | _tKey && | k,
|  | _tParams &&... | args
| ) |  | -> typename _tAssocCon::iterator

inline

带有提示的原地插入构造。

自从
  build 708

在文件 container.hpp 第 870 行定义.

引用了 CHRLib::args, ystdex::details::assoc_con_traits< _tAssocCon >::emplace_hint_in_place() , 以及 yforward.

被这些函数引用 ystdex::mapped_set< ValueNode, ystdex::less<>, MappedSetTraits, allocator_type >::emplace_hint_impl(), YSLib::UI::GetMappedEvent(), ystdex::details::insert_or_assign(), ystdex::map< VisualEvent, EventItem >::insert_or_assign_hint_impl(), ystdex::mapped_set< ValueNode, ystdex::less<>, MappedSetTraits, allocator_type >::insert_unique_impl(), try_emplace() , 以及 try_emplace_hint().

函数调用图:
这是这个函数的调用关系图:

## ◆ end() [2/4]

template<typename _type , size_t _vN>

_type* ystdex::end | ( | _type(&&) | array[_vN] | ) |

inline

自从
  build 664

在文件 range.hpp 第 383 行定义.

## ◆ ends_with() [1/2]

template<typename _tRange1 , typename _tRange2 >

bool ystdex::ends_with | ( | const _tRange1 & | input,
|  | const _tRange2 & | test
| ) |  |

inline

在文件 string.hpp 第 1205 行定义.

引用了 ends_with().

函数调用图:

## ◆ ends_with() [2/2]

template<typename _tRange1 , typename _tRange2 , typename _fPred >

bool ystdex::ends_with | ( | const _tRange1 & | input,
|  | const _tRange2 & | test,
|  | _fPred | comp
| ) |  |

inline

判断第一参数指定的串是否以第二参数结束。

在文件 string.hpp 第 1195 行定义.

引用了 ystdex::details::ends_with_iter_dispatch(), string_begin() , 以及 string_end().

被这些函数引用 ends_with() , 以及 main().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_all() [1/3]

template<typename _tCon , typename _tIter >

void ystdex::erase_all | ( | _tCon & | con,
|  | _tIter | first,
|  | _tIter | last
| ) |  |

inline

删除指定容器中指定区间中的或全部元素。

注解
  对不含 key_type 的容器视为序列容器。

自从
  build 633

注解
  对整个序列容器使用 ystdex::remove 移除元素范围。
  对序列容器中的部分序列使用 std::remove 移除元素范围。

在文件 container.hpp 第 495 行定义.

## ◆ erase_all() [2/3]

template<typename _tCon , typename _tIter , typename _type >

void ystdex::erase_all | ( | _tCon & | con,
|  | _tIter | first,
|  | _tIter | last,
|  | const _type & | value
| ) |  |

inline

在文件 container.hpp 第 501 行定义.

引用了 ystdex::details::erase_all().

函数调用图:

## ◆ erase_all() [3/3]

template<typename _tCon , typename _type >

void ystdex::erase_all | ( | _tCon & | con,
|  | const _type & | value
| ) |  |

inline

在文件 container.hpp 第 508 行定义.

引用了 ystdex::details::erase_all().

函数调用图:

## ◆ erase_all_if() [1/2]

template<typename _tCon , typename _fPred >

void ystdex::erase_all_if | ( | _tCon & | con,
|  | _fPred | pred
| ) |  |

inline

在文件 container.hpp 第 532 行定义.

引用了 ystdex::details::erase_all_if().

函数调用图:

## ◆ erase_all_if() [2/2]

template<typename _tCon , typename _tIter , typename _fPred >

void ystdex::erase_all_if | ( | _tCon & | con,
|  | _tIter | first,
|  | _tIter | last,
|  | _fPred | pred
| ) |  |

inline

删除指定容器中指定区间中的或全部满足谓词的元素。

检查容器是否具有键类型，否则视为序列容器。 对整个序列容器优先使用成员 remove_if 移除元素范围。 对序列容器中的部分序列或不存在成员 remove_if 的序列容器， 使用 std::remove_if 移除元素范围。

在文件 container.hpp 第 525 行定义.

引用了 ystdex::details::erase_all_if().

被这些函数引用 ystdex::path< _tSeqCon, _tTraits >::filter_self(), YReader::ShlTextReader::LoadFile(), YSLib::UI::MLinearUIContainer::operator-=() , 以及 YSLib::RemoveEmptyChildren().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_first()

template<class _tAssocCon , typename _tKey >

bool ystdex::erase_first | ( | _tAssocCon & | con,
|  | const _tKey & | k
| ) |  |

删除指定关联容器中等价于指定键的起始元素。

自从
  build 680

返回
  是否成功删除。

在文件 container.hpp 第 547 行定义.

引用了 ystdex::cpp2017::end() , 以及 YSLib::i.

被这些函数引用 YSLib::ValueNode::yimpl().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_left() [1/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_left | ( | _tString && | str,
|  | const remove_reference_t< _tString > & | t
| ) |  |

inline

在文件 string.hpp 第 1357 行定义.

引用了 YSLib::IO::_tString, erase_left() , 以及 YSLib::Text::str.

函数调用图:

## ◆ erase_left() [2/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_left | ( | _tString && | str,
|  | typename string_traits< _tString >::const_pointer | t = `&to_array<typename string_traits<_tString>::value_type>(" \f\n\r\t\v")[0]`
| ) |  |

inline

前置条件
  断言：指针参数非空。

自从
  build 600

在文件 string.hpp 第 1368 行定义.

引用了 YSLib::IO::_tString, erase_left(), YSLib::Text::str , 以及 yconstraint.

被这些函数引用 erase_left().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_left() [3/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_left | ( | _tString && | str,
|  | typename string_traits< _tString >::value_type | c
| ) |  |

inline

在文件 string.hpp 第 1350 行定义.

引用了 YSLib::IO::_tString, CHRLib::c, erase_left() , 以及 YSLib::Text::str.

函数调用图:

## ◆ erase_left() [4/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_left | ( | typename string_traits< _tString >::size_type | pos,
|  | _tString && | str
| ) |  |

inline

删除字符串中指定位置或指定字符最先出现的位置的左侧的字符串。

前置条件
  字符串类型满足 basic_string 或 basic_string_view 的操作及异常规范。

自从
  build 592

在文件 string.hpp 第 1343 行定义.

引用了 YSLib::IO::_tString, erase_left() , 以及 YSLib::Text::str.

被这些函数引用 YSLib::Devices::InputManager::DispatchInput(), erase_left(), main() , 以及 ystdex::details::str_algos< 0 >::trim_left_pos().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_multi() [1/2]

template<class _tAssocCon , typename _tKey >

_tAssocCon::size_type ystdex::erase_multi | ( | _tAssocCon & | con,
|  | const _tKey & | k
| ) |  |

在文件 container.hpp 第 572 行定义.

引用了 ystdex::any_ops::distance.

## ◆ erase_multi() [2/2]

template<class _tAssocCon >

_tAssocCon::size_type ystdex::erase_multi | ( | _tAssocCon & | con,
|  | const typename _tAssocCon::key_type & | k
| ) |  |

inline

删除指定关联容器中等价于指定键的所有元素。

返回
  删除的元素数。

在文件 container.hpp 第 566 行定义.

## ◆ erase_n() [1/2]

template<typename _tCon >

_tCon::const_iterator ystdex::erase_n | ( | _tCon & | con,
|  | typename _tCon::const_iterator | i,
|  | typename _tCon::difference_type | n
| ) |  |

删除指定容器中指定迭代器起始指定数量的元素。

前置条件
  指定的迭代器是指定容器的迭代器。
  断言：删除的范围不超出容器。

自从
  build 531

在文件 container.hpp 第 597 行定义.

引用了 ystdex::cpp2014::cend(), ystdex::any_ops::distance, YSLib::i, next , 以及 YAssert.

函数调用图:

## ◆ erase_n() [2/2]

template<typename _tCon >

_tCon::iterator ystdex::erase_n | ( | _tCon & | con,
|  | typename _tCon::iterator | i,
|  | typename _tCon::difference_type | n
| ) |  |

自从
  build 532

在文件 container.hpp 第 607 行定义.

引用了 ystdex::any_ops::distance, ystdex::cpp2017::end(), YSLib::i, next , 以及 YAssert.

函数调用图:

## ◆ erase_right() [1/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_right | ( | _tString && | str,
|  | const remove_reference_t< _tString > & | t
| ) |  |

inline

自从
  build 659

在文件 string.hpp 第 1396 行定义.

引用了 YSLib::IO::_tString, erase_right() , 以及 YSLib::Text::str.

函数调用图:

## ◆ erase_right() [2/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_right | ( | _tString && | str,
|  | typename string_traits< _tString >::const_pointer | t = `&to_array<typename string_traits<_tString>::value_type>(" \f\n\r\t\v")[0]`
| ) |  |

inline

前置条件
  断言：指针参数非空。

自从
  build 600

在文件 string.hpp 第 1407 行定义.

引用了 YSLib::IO::_tString, erase_right(), YSLib::Text::str , 以及 yconstraint.

被这些函数引用 erase_right().

函数调用图:
这是这个函数的调用关系图:

## ◆ erase_right() [3/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_right | ( | _tString && | str,
|  | typename string_traits< _tString >::value_type | c
| ) |  |

inline

在文件 string.hpp 第 1388 行定义.

引用了 YSLib::IO::_tString, CHRLib::c, erase_right() , 以及 YSLib::Text::str.

函数调用图:

## ◆ erase_right() [4/4]

template<class _tString >

enable_if_t<is_class<decay_t<_tString> >::value, _tString&&> ystdex::erase_right | ( | typename string_traits< _tString >::size_type | pos,
|  | _tString && | str
| ) |  |

inline

删除字符串中指定位置或指定字符最后出现的位置的右侧的字符串。

在文件 string.hpp 第 1381 行定义.

引用了 YSLib::IO::_tString, erase_right() , 以及 YSLib::Text::str.

被这些函数引用 erase_right() , 以及 main().

函数调用图:
这是这个函数的调用关系图:

## ◆ exists_if()

template<class _tCon , typename _fPred >

bool ystdex::exists_if | ( | const _tCon & | con,
|  | _fPred | pred
| ) |  |

inline

判断指定的容器中存在满足指定谓词的键。

自从
  build 888

使用 std::find_if 判断参数满足指定的谓词的键的存在性。

在文件 container.hpp 第 475 行定义.

引用了 ystdex::cpp2014::cbegin() , 以及 ystdex::cpp2014::cend().

函数调用图:

## ◆ exists_substr() [1/2]

template<class _tString , typename _type >

bool ystdex::exists_substr | ( | const _tString & | str,
|  | const _type & | sub
| ) |  |

inline

判断是否存在子串。

自从
  build 546

待办事项:
  添加序列容器子串重载版本；优化：避免构造子串对象。

在文件 string.hpp 第 1221 行定义.

引用了 YSLib::Text::str.

## ◆ exists_substr() [2/2]

template<class _tString , typename _type >

bool ystdex::exists_substr | ( | const _tString & | str,
|  | const typename _tString::value_type * | p_sub
| ) |  |

inline

在文件 string.hpp 第 1227 行定义.

引用了 YSLib::Text::str , 以及 yconstraint.

## ◆ extract()

template<typename _tChar , class _tTraits , class _tAlloc , typename _func >

std::basic_istream<_tChar, _tTraits>& ystdex::extract | ( | std::basic_istream< _tChar, _tTraits > & | is,
|  | std::basic_string< _tChar, _tTraits, _tAlloc > & | str,
|  | _func | f
| ) |  |

从输入流中取字符串。

自从
  build 565

注解
  同 std::getline ，除判断分隔符及附带的副作用由参数的函数对象决定。

在文件 string.hpp 第 1634 行定义.

引用了 CHRLib::c, CHRLib::f(), rethrow_badstate(), YSLib::Text::str , 以及 yassume.

被这些函数引用 extract_line() , 以及 extract_line_cr().

函数调用图:
这是这个函数的调用关系图:

## ◆ extract_key()

template<class _tAssocCon , typename _type , typename = enable_if_convertible_t<const _type&, const typename _tAssocCon::value_type&>>

const _tAssocCon::key_type& ystdex::extract_key | ( | const _type & | val | ) |

inline

从关联容器的值取键。

自从
  build 679

在文件 container.hpp 第 886 行定义.

引用了 ystdex::details::assoc_con_traits< _tAssocCon >::extract_key().

函数调用图:

## ◆ extract_line() [1/2]

template<typename _tChar , class _tTraits , class _tAlloc >

std::basic_istream<_tChar, _tTraits>& ystdex::extract_line | ( | std::basic_istream< _tChar, _tTraits > & | is,
|  | std::basic_string< _tChar, _tTraits, _tAlloc > & | str
| ) |  |

inline

在文件 string.hpp 第 1712 行定义.

引用了 extract_line() , 以及 YSLib::Text::str.

函数调用图:

## ◆ extract_line() [2/2]

template<typename _tChar , class _tTraits , class _tAlloc >

std::basic_istream<_tChar, _tTraits>& ystdex::extract_line | ( | std::basic_istream< _tChar, _tTraits > & | is,
|  | std::basic_string< _tChar, _tTraits, _tAlloc > & | str,
|  | _tChar | delim
| ) |  |

注解
  同 std::getline ，除字符串结尾包含分隔符。

在文件 string.hpp 第 1691 行定义.

引用了 CHRLib::c, CHRLib::d, delim, extract() , 以及 YSLib::Text::str.

被这些函数引用 extract_line().

函数调用图:
这是这个函数的调用关系图:

## ◆ extract_line_cr()

template<typename _tChar , class _tTraits , class _tAlloc >

std::basic_istream<_tChar, _tTraits>& ystdex::extract_line_cr | ( | std::basic_istream< _tChar, _tTraits > & | is,
|  | std::basic_string< _tChar, _tTraits, _tAlloc > & | str,
|  | _tChar | delim_cr = `'\r'`,
|  | _tChar | delim = `'\n'`
| ) |  |

同 `ystdex::extract_line` ，但允许分隔符包含附加的前缀字符。

注解
  默认 `LF` 作为基准分隔符，前缀为 `CR` ，即接受 `LF` 和 `CR+LF` 。
  一般配合二进制方式打开的流使用，以避免不必要的分隔符转换。

在文件 string.hpp 第 1725 行定义.

引用了 CHRLib::c, CHRLib::d, delim, extract() , 以及 YSLib::Text::str.

函数调用图:

## ◆ extract_mapped()

template<class _tAssocCon , typename _type , typename = enable_if_convertible_t<_type&, typename _tAssocCon::value_type&>>

auto ystdex::extract_mapped | ( | _type & | val | ) | -> decltype(details::assoc_con_traits<_tAssocCon>::extract_mapped( is_detected<details::mapped_type_t, _tAssocCon>(), val))

inline

从关联容器的值取映射的值。

自从
  build 792

在文件 container.hpp 第 900 行定义.

引用了 ystdex::details::assoc_con_traits< _tAssocCon >::extract_mapped().

函数调用图:

## ◆ fast_all_of()

template<typename _tIn , typename _fPred >

bool ystdex::fast_all_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

快速序列判断操作。

注解
  保证从序列起始判断，尽早确定返回值，保证若干个值被判断一次，之后的值不被判断。

自从
  build 675

注解
  若返回值，同 std::all_of 的返回结果。

在文件 algorithm.hpp 第 89 行定义.

## ◆ fast_any_of()

template<typename _tIn , typename _fPred >

bool ystdex::fast_any_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

注解
  若返回值，同 std::any_of 的返回结果。

在文件 algorithm.hpp 第 99 行定义.

被这些函数引用 fast_none_of() , 以及 NPL::A1::PassesCombiner::operator()().

这是这个函数的调用关系图:

## ◆ fast_none_of()

template<typename _tIn , typename _fPred >

bool ystdex::fast_none_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

注解
  若返回值，同 std::none_of 的返回结果。

在文件 algorithm.hpp 第 109 行定义.

引用了 fast_any_of().

函数调用图:

## ◆ fexists()

bool ystdex::fexists | ( | const char * | path | ) |

判断指定路径的文件是否存在。

注解
  使用 std::fopen 实现。

前置条件
  断言：参数非空。

自从
  build 326

在文件 cstdio.cpp 第 59 行定义.

引用了 call_value_or(), compose(), yconstraint , 以及 yimpl.

被这些函数引用 platform::ufexists().

函数调用图:
这是这个函数的调用关系图:

## ◆ find_prefix()

template<typename _tString , typename... _tParams>

_tString ystdex::find_prefix | ( | const _tString & | str,
|  | _tParams &&... | args
| ) |  |

inline

取前缀子字符串。

自从
  build 599

在文件 string.hpp 第 1521 行定义.

引用了 CHRLib::args, YSLib::Text::str , 以及 yforward.

## ◆ find_suffix()

template<typename _tString , typename... _tParams>

_tString ystdex::find_suffix | ( | const _tString & | str,
|  | _tParams &&... | args
| ) |  |

inline

取后缀子字符串。

在文件 string.hpp 第 1538 行定义.

引用了 CHRLib::args, YSLib::Text::str , 以及 yforward.

被这些函数引用 YSLib::IO::GetExtensionOf().

这是这个函数的调用关系图:

## ◆ floor_lb()

size_t ystdex::floor_lb | ( | std::uintmax_t | n | ) |

inline

计算 2 为底数的无符号整数的向下取整的对数值。

前置条件
  `n != 0` 。

在文件 cstdint.hpp 第 443 行定义.

引用了 ystdex::details::floor_lb().

被这些函数引用 YSLib::MakeIndex().

函数调用图:
这是这个函数的调用关系图:

## ◆ for_each_equal()

template<typename _tIn , typename _func , typename _type >

_func ystdex::for_each_equal | ( | _tIn | first,
|  | _tIn | last,
|  | const _type & | value,
|  | _func | f
| ) |  |

模板参数

  _func | 用于遍历范围的操作的可调用类型。

参数

  first | 输入范围起始迭代器。
  last | 输入范围终止迭代器。
  f | 遍历操作。

前置条件
  _func 满足 MoveConstructible 要求。
  _type 满足 EqualityComparable 要求。

返回
  转移的 f 。

注解
  时间复杂度： 不大于 `last - first` 次 `f` 的调用。

参见
  WG21 N3936 25.2.4[alg.foreach] 。
  其它参考实现： http://stackoverflow.com/questions/234482/using-stl-to-find-all-elements-in-a-vector 。

分别应用操作至范围 `[first, last)` 内的解应用的迭代器 `i` 满足以下条件：

- `*i == value`
- `pred(*i) != false`

在文件 algorithm.hpp 第 173 行定义.

引用了 CHRLib::f().

函数调用图:

## ◆ for_each_if()

template<typename _tIn , typename _func , typename _fPred >

_func ystdex::for_each_if | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred,
|  | _func | f
| ) |  |

在文件 algorithm.hpp 第 185 行定义.

引用了 CHRLib::f().

被这些函数引用 YSLib::ValueNode::SelectChildren() , 以及 YSLib::ValueNode::SplitChildren().

函数调用图:
这是这个函数的调用关系图:

## ◆ forward_as_array()

template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::forward_as_array | ( | _tParams &&... | args | ) |

inline

转移指定参数至 std::array 对象。

在文件 array.hpp 第 68 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ forward_like()

template<typename _type , typename _type2 >

forward_like_t<_type, _type2> ystdex::forward_like | ( | _type2 && | x | ) |

按第一模板参数指定类型蕴含的值类别传递参数。

在文件 utility.hpp 第 57 行定义.

引用了 x , 以及 yforward.

## ◆ function_not_empty() [1/5]

template<typename _func , typename = enable_if_t<is_function<_func>::value>>

static bool ystdex::function_not_empty | ( | _func * | p | ) |

static

在文件 function.hpp 第 604 行定义.

引用了 platform::p.

## ◆ function_not_empty() [2/5]

template<typename _tRet , class _tClass >

static bool ystdex::function_not_empty | ( | _tRet _tClass::* | p | ) |

static

在文件 function.hpp 第 610 行定义.

引用了 platform::p.

## ◆ function_not_empty() [3/5]

template<typename _type >

static bool ystdex::function_not_empty | ( | const _type & |  | ) |

inlinestatic

在文件 function.hpp 第 616 行定义.

## ◆ function_not_empty() [4/5]

template<class _tTraits , typename _fSig >

static bool ystdex::function_not_empty | ( | const function_base< _tTraits, _fSig > & | f | ) |

static

自从
  build 849

在文件 function.hpp 第 597 行定义.

引用了 platform::bool , 以及 CHRLib::f().

函数调用图:

## ◆ function_not_empty() [5/5]

template<typename _fSig >

static bool ystdex::function_not_empty | ( | const std::function< _fSig > & | f | ) |

static

判断是否符合 std::function 实现初始化为空函数对象的条件。

注解
  同时支持对 std::function 和 ystdex 中的实现的判断。

参见
  ISO C++17 [func.wrap.func.con]/9 。

自从
  build 848

在文件 function.hpp 第 590 行定义.

引用了 platform::bool , 以及 CHRLib::f().

被这些函数引用 ystdex::function_base< _tTraits, _tRet(_tParams...)>::function_base().

函数调用图:
这是这个函数的调用关系图:

## ◆ general_cast() [1/3]

template<typename _tDst , typename _tSrc >

_tDst ystdex::general_cast | ( | _tSrc & | v | ) |

inline

在文件 cast.hpp 第 466 行定义.

引用了 v.

## ◆ general_cast() [2/3]

template<typename _tDst , typename _tSrc >

_tDst ystdex::general_cast | ( | _tSrc * | v | ) |

inline

一般类型转换。

模板参数

  _tSrc | 源类型。
  _tDst | 目标类型。

自从
  build 175

待办事项:
  扩展接受右值引用参数。

能确保安全隐式转换时使用 static_cast ； 除此之外非虚基类向派生类转换使用 polymorphic_downcast ； 否则使用 dynamic_cast。

在文件 cast.hpp 第 459 行定义.

引用了 v.

## ◆ general_cast() [3/3]

template<typename _tDst , typename _tSrc >

const _tDst ystdex::general_cast | ( | const _tSrc & | v | ) |

inline

在文件 cast.hpp 第 473 行定义.

引用了 v.

## ◆ get_init() [1/2]

template<typename _tKey , typename... _tKeys, typename _fInit , typename... _tParams>

auto ystdex::get_init | ( | _fInit && | f,
|  | _tParams &&... | args
| ) |  | -> decltype(f(std::forward<decltype( args )>( args )...))&

inline

取类型标识和初始化调用指定的对象。

模板参数

  _tKey | 起始类型参数化标识。
  _tKeys | 非起始类型参数化标识。
  _fInit | 初始化调用类型。
  _tParams | 初始化参数类型。

返回
  初始化后的对象的左值引用。

自从
  build 327

在文件 utility.hpp 第 267 行定义.

引用了 CHRLib::args, CHRLib::f(), platform::p , 以及 yforward.

函数调用图:

## ◆ get_init() [2/2]

template<size_t... _vKeys, typename _fInit , typename... _tParams>

auto ystdex::get_init | ( | _fInit && | f,
|  | _tParams &&... | args
| ) |  | -> decltype(f(std::forward<decltype( args )>( args )...))&

inline

取非类型标识和初始化调用指定的对象。

模板参数

  _vKeys | 非类型参数化标识。
  _fInit | 初始化调用类型。
  _tParams | 初始化参数类型。

返回
  初始化后的对象的左值引用。

自从
  build 327

在文件 utility.hpp 第 287 行定义.

引用了 CHRLib::args, CHRLib::f(), platform::p , 以及 yforward.

函数调用图:

## ◆ get_mid() [1/2]

template<typename _tString >

_tString ystdex::get_mid | ( | const _tString & | str,
|  | typename _tString::size_type | l,
|  | typename _tString::size_type | r
| ) |  |

inline

在文件 string.hpp 第 1615 行定义.

引用了 platform::l, YSLib::Drawing::r, YSLib::Text::str , 以及 yassume.

## ◆ get_mid() [2/2]

template<typename _tString >

_tString ystdex::get_mid | ( | const _tString & | str,
|  | typename _tString::size_type | l = `1`
| ) |  |

inline

取删除前缀和后缀的子字符串。

前置条件
  断言：删除的字符串不大于串长。

自从
  build 304

在文件 string.hpp 第 1608 行定义.

引用了 platform::l, YSLib::Text::str , 以及 yassume.

被这些函数引用 NPL::EscapeLiteral().

这是这个函数的调用关系图:

## ◆ get_nested_exception_ptr()

template<class _tEx >

std::exception_ptr ystdex::get_nested_exception_ptr | ( | const _tEx & | e | ) |

inline

取嵌套异常指针。

返回
  若符合 std::rethrow_if_nested 抛出异常的条件则返回异常指针，否则为空。

自从
  build 538

在文件 ystdex/exception.h 第 68 行定义.

引用了 addressof(), call_value_or() , 以及 CHRLib::e.

函数调用图:

## ◆ get_quote_mark_nonstrict()

template<typename _tString >

string_traits<_tString>::value_type ystdex::get_quote_mark_nonstrict | ( | const _tString & | str | ) |

inline

取相同的前缀和后缀元素。

前置条件
  取前缀和后缀操作无副作用。
  字符串非空。

自从
  build 697

待办事项:

  检查非成员 `front` 和 back `。`

  支持前缀和后缀字符串。

  扩展到一般容器。

在文件 string.hpp 第 1564 行定义.

引用了 YSLib::Text::str.

被这些函数引用 NPL::CheckLiteral().

这是这个函数的调用关系图:

## ◆ get_raw() [1/4]

template<typename _type >

_type* ystdex::get_raw | ( | _type *const & | p | ) |

inline

在文件 memory.hpp 第 449 行定义.

引用了 platform::p.

被这些函数引用 YSLib::GetRawPtrOf(), YSLib::Shells::Shell::IsActive() , 以及 YSLib::IsNullPointer().

这是这个函数的调用关系图:

## ◆ get_raw() [2/4]

template<typename _type >

_type* ystdex::get_raw | ( | const std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 463 行定义.

引用了 platform::p.

## ◆ get_raw() [3/4]

template<typename _type , typename _fDeleter >

auto ystdex::get_raw | ( | const std::unique_ptr< _type, _fDeleter > & | p | ) | -> decltype(p.get())

inline

自从
  build 550

在文件 memory.hpp 第 456 行定义.

引用了 platform::p.

## ◆ get_raw() [4/4]

template<typename _type >

_type* ystdex::get_raw | ( | const std::weak_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 469 行定义.

引用了 platform::p.

## ◆ get_this_thread_id()

std::string ystdex::get_this_thread_id | ( |  | ) |

inline

取当前线程标识的字符串表示。

参见
  ystdex::to_string

自从
  build 626

在文件 concurrency.h 第 78 行定义.

引用了 to_string().

函数调用图:

## ◆ handle_nested()

template<typename _tEx , typename _func , typename _tExCaught = remove_cv_t<_tEx>&>

void ystdex::handle_nested | ( | _tEx & | e,
|  | _func && | f
| ) |  |

处理嵌套异常。

自从
  build 539

在文件 ystdex/exception.h 第 96 行定义.

引用了 CHRLib::e, CHRLib::f() , 以及 yforward.

函数调用图:

## ◆ hash_combine()

template<typename _type >

void ystdex::hash_combine | ( | size_t & | seed,
|  | const _type & | val
| ) |  |

inline

重复计算散列。

注解
  `(1UL << 31) / ((1 + std::sqrt(5)) / 4) == 0x9E3779B9` 。

警告
  实现（ Boost 文档作为 Effects ）可能改变，不应作为接口依赖。

在文件 hash.hpp 第 53 行定义.

被这些函数引用 hash_combine_seq() , 以及 hash_range().

这是这个函数的调用关系图:

## ◆ hash_combine_seq()

template<typename _type , typename... _tParams>

size_t ystdex::hash_combine_seq | ( | size_t | seed,
|  | const _type & | val,
|  | const _tParams &... | args
| ) |  |

inline

在文件 hash.hpp 第 74 行定义.

引用了 CHRLib::args , 以及 hash_combine_seq().

函数调用图:

## ◆ hash_range() [1/2]

template<typename _tIn >

size_t ystdex::hash_range | ( | _tIn | first,
|  | _tIn | last
| ) |  |

inline

在文件 hash.hpp 第 100 行定义.

引用了 hash_range().

函数调用图:

## ◆ hash_range() [2/2]

template<typename _tIn >

size_t ystdex::hash_range | ( | size_t | seed,
|  | _tIn | first,
|  | _tIn | last
| ) |  |

inline

重复对范围计算散列。

注解
  使用 ADL 。

自从
  build 531

在文件 hash.hpp 第 90 行定义.

引用了 hash_combine() , 以及 CHRLib::s.

被这些函数引用 hash_range(), std::hash< ystdex::basic_string< _tChar, _tTraits, ystdex::pmr::polymorphic_allocator< _tChar > > >::operator()() , 以及 std::hash< ystdex::basic_string_view< _tChar, _tTraits > >::operator()().

函数调用图:
这是这个函数的调用关系图:

## ◆ insert_or_assign()

template<class _tAssocCon , typename _tKey , typename _tParam >

std::pair<typename _tAssocCon::iterator, bool> ystdex::insert_or_assign | ( | _tAssocCon & | con,
|  | _tKey && | k,
|  | _tParam && | arg
| ) |  |

inline

注解
  使用 ADL extract_mapped 。

自从
  build 681

在文件 container.hpp 第 1068 行定义.

引用了 ystdex::details::insert_or_assign(), search_map() , 以及 yforward.

被这些函数引用 NPL::Environment::Bind(), NPL::EmplaceLeaf(), YSLib::ValueNode::ImplRet() , 以及 ystdex::map< VisualEvent, EventItem >::insert_or_assign().

函数调用图:
这是这个函数的调用关系图:

## ◆ insert_or_assign_hint()

template<class _tAssocCon , typename _tKey , typename _tParam >

std::pair<typename _tAssocCon::iterator, bool> ystdex::insert_or_assign_hint | ( | _tAssocCon & | con,
|  | typename _tAssocCon::const_iterator | hint,
|  | _tKey && | k,
|  | _tParam && | arg
| ) |  |

inline

在文件 container.hpp 第 1076 行定义.

引用了 ystdex::details::insert_or_assign(), search_map() , 以及 yforward.

被这些函数引用 YSLib::ValueNode::insert_or_assign().

函数调用图:
这是这个函数的调用关系图:

## ◆ insert_reversed()

template<typename _tCon , typename _tIn >

_tCon::const_iterator ystdex::insert_reversed | ( | _tCon & | con,
|  | typename _tCon::const_iterator | i,
|  | _tIn | first,
|  | _tIn | last
| ) |  |

逆向插入范围到容器的指定位置。

参数

  con | 指定的容器。
  i | 指定起始插入位置的迭代器。
  first | 输入范围起始迭代器。
  last | 输入范围终止迭代器。

前置条件
  i 是 con 的迭代器。

自从
  build 532

调用带有迭代器参数的 `insert` 成员函数插入迭代器指定的范围到容器的指定位置。 con 是关联容器时，范围内元素有序可被优化。

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

引用了 YSLib::i , 以及 YB_VerifyIterator.

## ◆ invoke()

template<typename _fCallable , typename... _tParams>

invoke_result_t<_fCallable, _tParams...> ystdex::invoke | ( | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

inline

调用可调用对象。

注解
  和 ISO C++17 的 std::invoke 兼容，只处理 std::wrapper_reference 为引用包装。

参见
  http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4169.html
  ISO C++17 [func.require] ， ISO C++ 17 [func.invoke] 。
  CWG 1581 。
  LWG 2013 。
  LWG 2219 。
  WG21 P0604R0 。
  https://llvm.org/bugs/show_bug.cgi?id=23141 。

自从
  build 832

在文件 invoke.hpp 第 538 行定义.

引用了 CHRLib::args, CHRLib::f(), ystdex::details::invoke_impl() , 以及 yforward.

被这些函数引用 YSLib::UI::ActOnHover(), ystdex::call_projection< std::tuple< _tParams... >, index_sequence< _vSeq... > >::apply_invoke(), NPL::c_str(), YSLib::ValueNode::CreateRecursively(), ystdex::function_base< _tTraits, _tRet(_tParams...)>::function_base(), NPL::Session::GetResult(), YSLib::GHandlerRegisterBase< GWidgetRegister< _tParams... >, string, GWidgetCreator< _tParams... > >::if(), ystdex::function_base< _tTraits, _tRet(_tParams...)>::invoker< _tHandler >::invoke(), ystdex::details::invoke_for_value(), ystdex::details::invoke_nonvoid_impl(), invoke_value_or(), ystdex::lref<::FreeImageIO >::operator()(), ystdex::thunk< _tRet, _fCallable >::operator()(), ystdex::transformed_iterator< _tIter, _fTrans, _tReference >::operator*(), NPL::PrintContainedNodes(), YSLib::SetContentWith(), NPL::TraverseSubnodes() , 以及 ystdex::task_pool::wait_to_enqueue().

函数调用图:
这是这个函数的调用关系图:

## ◆ invoke_for_value()

template<typename _type , typename _fCallable , typename... _tParams>

auto ystdex::invoke_for_value | ( | _type && | val,
|  | _fCallable && | f,
|  | _tParams &&... | args
| ) |  | -> common_nonvoid_t<invoke_result_t<_fCallable, _tParams...>, _type>

调用第二参数起指定的函数对象，若返回空类型则使用第一参数的值为返回值。

自从
  build 832

在文件 functional.hpp 第 458 行定义.

引用了 YSLib::_tParams, CHRLib::args, CHRLib::f(), ystdex::details::invoke_for_value() , 以及 yforward.

函数调用图:

## ◆ invoke_nonvoid()

template<typename _fCallable , typename... _tParams>

nonvoid_result_t<invoke_result_t<_fCallable, _tParams...> > ystdex::invoke_nonvoid | ( | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

inline

调用可调用对象，保证返回值非空。

自从
  build 832

待办事项:
  支持引用包装。

在文件 invoke.hpp 第 572 行定义.

引用了 YSLib::_tParams, CHRLib::args, CHRLib::f(), ystdex::details::invoke_nonvoid_impl() , 以及 yforward.

被这些函数引用 NPL::A1::Forms::CallBinary(), NPL::A1::Forms::CallBinaryAs(), NPL::A1::Forms::CallUnary(), retry_on_cond() , 以及 YSLib::TryInvoke().

函数调用图:
这是这个函数的调用关系图:

## ◆ invoke_value_or() [1/3]

template<typename _type , typename _func >

auto ystdex::invoke_value_or | ( | _func | f,
|  | _type && | p
| ) |  | -> decay_t<decltype(ystdex::invoke(f, *std::forward<decltype( p )>( p )))>

inline

使用 invoke 调用非空值或取默认值。

参见
  ystdex::call_value_or
  ystdex::invoke

自从
  build 767

在文件 invoke.hpp 第 588 行定义.

引用了 CHRLib::f(), invoke(), platform::p , 以及 yforward.

被这些函数引用 YSLib::GetValueOf(), NPL::IsBoundLValueTerm() , 以及 NPL::IsUniqueTerm().

函数调用图:
这是这个函数的调用关系图:

## ◆ invoke_value_or() [2/3]

template<typename _tOther , typename _type , typename _func >

auto ystdex::invoke_value_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other
| ) |  | -> decltype(p ? ystdex::invoke(f, *std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 invoke.hpp 第 596 行定义.

引用了 CHRLib::f(), invoke(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ invoke_value_or() [3/3]

template<typename _tOther , typename _type , typename _func , typename _tSentinal = nullptr_t>

auto ystdex::invoke_value_or | ( | _func | f,
|  | _type && | p,
|  | _tOther && | other,
|  | _tSentinal && | last
| ) |  | -> decltype(!bool(p == std::forward<decltype( last )>( last )) ? ystdex::invoke(f, *std::forward<decltype( p )>( p )) : std::forward<decltype( other )>( other ))

inline

在文件 invoke.hpp 第 604 行定义.

引用了 platform::bool, CHRLib::f(), invoke(), CHRLib::CharSet::other, platform::p , 以及 yforward.

函数调用图:

## ◆ is_aligned_ptr()

template<typename _type >

bool ystdex::is_aligned_ptr | ( | _type * | p,
|  | size_t | alignment = `std::alignment_of< cond_t<is_void<_type> >::value std::max_align_t, _type>`
| ) |  |

inline

返回参数指定的指针值对齐到指定的对齐值。

前置条件
  断言：指针非空。
  断言：对齐值是 2 的整数次幂。
  指针指向对象。

自从
  build 843

在文件 placement.hpp 第 97 行定义.

引用了 alignment, platform::bool, is_power_of_2_positive(), platform::p , 以及 yconstraint.

函数调用图:

## ◆ is_date_range_valid()

bool ystdex::is_date_range_valid | ( | const std::tm & | t | ) |

inline

判断 std::tm 的日期数据成员范围是否有效。

自从
  build 704

在文件 ctime.h 第 41 行定义.

被这些函数引用 platform::FAT::FetchDateTime().

这是这个函数的调用关系图:

## ◆ is_null()

template<typename _tChar >

bool ystdex::is_null | ( | _tChar | c | ) |

inline

使用 `std::char_traits::eq` 判断是否为空字符。

自从
  build 653

在文件 cstring.h 第 127 行定义.

引用了 CHRLib::c.

被这些函数引用 const_ntctscmp(), const_ntctscnt(), const_ntctsfind(), const_ntctslen(), platform::if(), ntctschr(), ntctscmp(), ntctscpy(), ntctsicmp(), ntctsncpy(), string_empty(), CHRLib::UCS2ToUCS4() , 以及 CHRLib::UCS4ToUCS2().

这是这个函数的调用关系图:

## ◆ is_power_of_2()

bool ystdex::is_power_of_2 | ( | std::uintmax_t | n | ) |

inline

判断无符号整数是否为 2 的整数次幂。

自从
  build 842

在文件 cstdint.hpp 第 270 行定义.

被这些函数引用 is_power_of_2_positive().

这是这个函数的调用关系图:

## ◆ is_power_of_2_positive()

bool ystdex::is_power_of_2_positive | ( | std::uintmax_t | n | ) |

inline

判断无符号整数是否为 2 的整数次幂的正整数。

自从
  build 885

在文件 cstdint.hpp 第 280 行定义.

引用了 is_power_of_2().

被这些函数引用 ystdex::pmr::adjust_pool_options(), ystdex::pmr::cpp2017::memory_resource::allocate(), ystdex::pmr::cpp2017::memory_resource::deallocate() , 以及 is_aligned_ptr().

函数调用图:
这是这个函数的调用关系图:

## ◆ is_time_no_leap_valid()

bool ystdex::is_time_no_leap_valid | ( | const std::tm & | t | ) |

inline

判断 std::tm 的时间数据成员范围是否有效。

在文件 ctime.h 第 48 行定义.

被这些函数引用 platform::FAT::FetchDateTime().

这是这个函数的调用关系图:

## ◆ is_undereferenceable() [1/4]

template<typename _type >

bool ystdex::is_undereferenceable | ( | _type * | p | ) |

inline

在文件 deref_op.hpp 第 52 行定义.

引用了 platform::p.

## ◆ is_undereferenceable() [2/4]

template<typename _tIter >

bool ystdex::is_undereferenceable | ( | const _tIter & |  | ) |

inline

在文件 deref_op.hpp 第 46 行定义.

被这些函数引用 CHRLib::CheckIterator(), YSLib::Drawing::DrawPolygon(), CHRLib::GUCSMapper< CharSet::UTF_8 >::Encode(), YSLib::Drawing::FetchStringOffsets(), YSLib::Drawing::FetchStringWidth(), platform::FwdIter(), CHRLib::ImplRet(), ystdex::any_ops::iterator_handler< _type, _tReference >::manage(), ystdex::indirect_input_iterator< _tIter >::operator bool(), YSLib::Drawing::VerticalLineTransfomer::operator()() , 以及 YSLib::Drawing::CopyLine< _bDec >::operator()().

这是这个函数的调用关系图:

## ◆ is_undereferenceable() [3/4]

template<typename _type >

bool ystdex::is_undereferenceable | ( | const std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 428 行定义.

引用了 platform::p.

## ◆ is_undereferenceable() [4/4]

template<typename _type >

bool ystdex::is_undereferenceable | ( | const std::weak_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 434 行定义.

引用了 platform::p.

## ◆ is_zero() [1/2]

template<typename _type >

enable_if_t<is_floating_point<_type>::value, bool> ystdex::is_zero | ( | _type | x | ) |

inline

判断指定的值是否为零值。

自从
  build 588

在文件 rational.hpp 第 45 行定义.

引用了 x.

被这些函数引用 round_in().

这是这个函数的调用关系图:

## ◆ is_zero() [2/2]

template<typename _type , typename = enable_if_t<!is_floating_point<_type>::value>>

bool ystdex::is_zero | ( | _type | x | ) |

inline

在文件 rational.hpp 第 52 行定义.

引用了 x.

## ◆ iscntrl_ASCII()

bool ystdex::iscntrl_ASCII | ( | char | c | ) |

inline

使用 US-ASCII 字符集的 std::isprint 。

参见
  ISO C11 7.4/3 脚注。

在文件 cctype.h 第 70 行定义.

引用了 CHRLib::c , 以及 iscntrl_C0().

函数调用图:

## ◆ iscntrl_C0()

bool ystdex::iscntrl_C0 | ( | char | c | ) |

inline

判断指定字符是否为 ISO/IEC 2022 定义的 C0 控制字符。

注解
  区域无关默认行为即使用 C 区域。
  保证此处引入声明的函数没有其它重载，以便直接用于 lambda 表达式等上下文。
  保证适当检查参数的值以避免引起 ISO C 未定义行为而要求 narrow constraint 。

参见
  ISO C11 7.4/1 。
  ISO C11 7.30.1/5 。

自从
  build 738

在文件 cctype.h 第 49 行定义.

引用了 CHRLib::c.

被这些函数引用 iscntrl_ASCII() , 以及 iscntrl_ISO8859_11().

这是这个函数的调用关系图:

## ◆ iscntrl_C1()

bool ystdex::iscntrl_C1 | ( | char | c | ) |

inline

判断指定字符是否为 ISO/IEC 2022 定义的 C1 控制字符。

在文件 cctype.h 第 60 行定义.

引用了 CHRLib::c , 以及 platform_ex::Windows::unsigned.

## ◆ iscntrl_ISO8859_1()

bool ystdex::iscntrl_ISO8859_1 | ( | char | c | ) |

inline

使用 ISO/IEC 8859-1 字符集的 std::iscntrl 。

在文件 cctype.h 第 85 行定义.

引用了 CHRLib::c, iscntrl_ISO8859_11() , 以及 platform_ex::Windows::unsigned.

函数调用图:

## ◆ iscntrl_ISO8859_11()

bool ystdex::iscntrl_ISO8859_11 | ( | char | c | ) |

inline

使用 ISO/IEC 8859-11(Latin/Thai) 字符集的 std::iscntrl 。

在文件 cctype.h 第 77 行定义.

引用了 CHRLib::c, iscntrl_C0() , 以及 platform_ex::Windows::unsigned.

被这些函数引用 iscntrl_ISO8859_1().

函数调用图:
这是这个函数的调用关系图:

## ◆ isdigit()

bool ystdex::isdigit | ( | char | c | ) |

inline

区域无关的 std::isdigit 。

注解
  ISO C 和 ISO C++ 保证基本字符集中的数字字符具有从小到大连续的整数值表示。
  可作为替代 MSVCRT 的实现的变通。

参见
  http://stackoverflow.com/questions/2898228/can-isdigit-legitimately-be-locale-dependent-in-c 。
  ISO C11 5.2.1/3 。
  ISO C++11 2.3/3 。

在文件 cctype.h 第 129 行定义.

引用了 CHRLib::c.

被这些函数引用 NPL::A1::DefaultEvaluateLeaf() , 以及 NPL::IsNPLAExtendedLiteral().

这是这个函数的调用关系图:

## ◆ isprint()

bool ystdex::isprint | ( | char | c | ) |

inline

区域无关的 std::isprint 。

注解
  当前使用基于 ISO/IEC 8859-1 的 Unicode 方案实现。
  可作为替代 MSVCRT 的实现的部分变通。

参见
  https://connect.microsoft.com/VisualStudio/feedback/details/799287/isprint-incorrectly-classifies-t-as-printable-in-c-locale

在文件 cctype.h 第 115 行定义.

引用了 CHRLib::c, isprint_ISO8859_1() , 以及 yimpl.

函数调用图:

## ◆ isprint_ASCII()

bool ystdex::isprint_ASCII | ( | char | c | ) |

inline

使用 US-ASCII 字符集的 std::isprint 。

参见
  ISO C11 7.4/3 脚注。

在文件 cctype.h 第 96 行定义.

引用了 CHRLib::c.

被这些函数引用 isprint_ISO8859_1().

这是这个函数的调用关系图:

## ◆ isprint_ISO8859_1()

bool ystdex::isprint_ISO8859_1 | ( | char | c | ) |

inline

使用 ISO/IEC 8859-1 字符集的 std::isprint 。

在文件 cctype.h 第 103 行定义.

引用了 CHRLib::c, isprint_ASCII() , 以及 platform_ex::Windows::unsigned.

被这些函数引用 isprint().

函数调用图:
这是这个函数的调用关系图:

## ◆ isspace()

bool ystdex::isspace | ( | char | c | ) |

inline

区域无关的 std::isspace 。

参见
  ISO C11 7.4.1.10 。

自从
  build 823

在文件 cctype.h 第 140 行定义.

引用了 CHRLib::c.

被这些函数引用 YReader::ShlReader::LoadBookmarks() , 以及 NPL::A1::Forms::LoadModule_SHBuild().

这是这个函数的调用关系图:

## ◆ iswgraph()

bool ystdex::iswgraph | ( | wchar_t | wc | ) |

inline

区域无关的 std::iswgraph 实现。

参见
  ISO C11 7.30.2.1.6 。

在文件 cwctype.h 第 62 行定义.

引用了 iswprint() , 以及 iswspace().

函数调用图:

## ◆ iswprint()

bool ystdex::iswprint | ( | wchar_t | wc | ) |

区域无关的 std::isprint 实现。

自从
  build 662

注解
  当前使用兼容 Unicode 的简单实现（参考 MUSL libc ）。
  可作为替代 MSVCRT 的实现的变通（测试表明 iswprintf 和 isprint 有类似缺陷）。

参见
  https://connect.microsoft.com/VisualStudio/feedback/details/799287/isprint-incorrectly-classifies-t-as-printable-in-c-locale

在文件 cwctype.cpp 第 34 行定义.

引用了 CHRLib::c , 以及 platform_ex::Windows::unsigned.

被这些函数引用 iswgraph().

这是这个函数的调用关系图:

## ◆ iswspace()

bool ystdex::iswspace | ( | wchar_t | wc | ) |

区域无关的 std::iswspace 实现。

注解
  当前使用 Unicode 5.2 实现（参考 newlib ）。
  可作为替代 Android 2.3.1 的实现的变通（测试表明 iswspace 对个别字符可能返回 8 ）。

自从
  build 514

在文件 cwctype.cpp 第 49 行定义.

被这些函数引用 iswgraph().

这是这个函数的调用关系图:

## ◆ iterate_exceptions()

template<typename _func >

void ystdex::iterate_exceptions | ( | _func && | f,
|  | std::exception_ptr | p = `std::current_exception()`
| ) |  |

迭代处理异常。

自从
  build 538

在文件 ystdex/exception.h 第 55 行定义.

引用了 CHRLib::f(), platform::p , 以及 yforward.

函数调用图:

## ◆ lower_bound_n()

template<typename _tFwd , typename _type , typename _fComp = less<_type>>

_tFwd ystdex::lower_bound_n | ( | _tFwd | first,
|  | typename std::iterator_traits< _tFwd >::difference_type | n,
|  | const _type & | value,
|  | _fComp | comp = `less<_type>()`
| ) |  |

注解
  起始范围距离可较迭代器类别指定的复杂度更优化（如指定 list 的整个范围时）。

自从
  build 865

在文件 algorithm.hpp 第 242 行定义.

引用了 ystdex::any_ops::advance , 以及 YB_VerifyIterator.

被这些函数引用 upper_bound_n().

这是这个函数的调用关系图:

## ◆ ltrim() [1/3]

template<class _tString >

_tString&& ystdex::ltrim | ( | _tString && | str,
|  | const _tString & | t
| ) |  |

inline

自从
  build 659

在文件 string.hpp 第 1431 行定义.

引用了 YSLib::IO::_tString , 以及 YSLib::Text::str.

## ◆ ltrim() [2/3]

template<class _tString >

_tString&& ystdex::ltrim | ( | _tString && | str,
|  | typename string_traits< _tString >::const_pointer | t = `&to_array<typename string_traits<_tString>::value_type>(" \f\n\r\t\v")[0]`
| ) |  |

inline

前置条件
  断言：指针参数非空。

自从
  build 600

在文件 string.hpp 第 1442 行定义.

引用了 YSLib::IO::_tString, YSLib::Text::str , 以及 yconstraint.

## ◆ ltrim() [3/3]

template<class _tString >

_tString&& ystdex::ltrim | ( | _tString && | str,
|  | typename string_traits< _tString >::value_type | c
| ) |  |

inline

删除字符串中指定的连续前缀字符。

自从
  build 552

在文件 string.hpp 第 1423 行定义.

引用了 YSLib::IO::_tString, CHRLib::c , 以及 YSLib::Text::str.

被这些函数引用 main() , 以及 trim().

这是这个函数的调用关系图:

## ◆ make_allocator_guard()

template<class _tAlloc >

allocator_guard<_tAlloc> ystdex::make_allocator_guard | ( | _tAlloc & | a,
|  | typename allocator_traits< _tAlloc >::size_type | n = `1`
| ) |  |

inline

构造分配器守卫。

自从
  build 843

在文件 allocator.hpp 第 878 行定义.

引用了 YSLib::a.

被这些函数引用 create_with_allocator() , 以及 ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::init().

这是这个函数的调用关系图:

## ◆ make_any()

template<typename _type , typename _tOther , typename... _tParams>

any ystdex::make_any | ( | std::initializer_list< _tOther > | il,
|  | _tParams &&... | args
| ) |  |

inline

在文件 any.h 第 2217 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ make_array()

template<typename _type = void, typename... _tParams>

common_array_t<_type, _tParams...> ystdex::make_array | ( | _tParams &&... | args | ) |

inline

构造指定参数初始化的 `std::array` 对象。

参见
  WG21 N4481 。

在文件 array.hpp 第 79 行定义.

引用了 CHRLib::args , 以及 decay_copy().

函数调用图:

## ◆ make_container() [1/2]

template<class _tCon , typename _tRange >

_tCon ystdex::make_container | ( | _tRange && | c | ) |

inline

注解
  使用 ystdex::begin 和 ystdex::end 指定范围迭代器。

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

引用了 ystdex::cpp2017::begin(), CHRLib::c, ystdex::cpp2017::end() , 以及 yforward.

函数调用图:

## ◆ make_container() [2/2]

template<class _tCon , typename _tRange , typename _func >

_tCon ystdex::make_container | ( | _tRange && | c,
|  | _func | f
| ) |  |

inline

在文件 container.hpp 第 65 行定义.

引用了 ystdex::cpp2017::begin(), CHRLib::c, ystdex::cpp2017::end() , 以及 CHRLib::f().

函数调用图:

## ◆ make_guard()

template<bool _bNoThrow = true, typename _type >

guard<_type> ystdex::make_guard | ( | _type | f | ) |

自从
  build 606

在文件 scope_guard.hpp 第 84 行定义.

引用了 CHRLib::f().

被这些函数引用 main(), NPL::SContext::Reduce() , 以及 NPL::A1::ContextState::RewriteGuarded().

函数调用图:
这是这个函数的调用关系图:

## ◆ make_move_iterator_pair() [1/2]

template<typename _tIter1 , typename _tIter2 >

auto ystdex::make_move_iterator_pair | ( | _tIter1 | it1,
|  | _tIter2 | it2
| ) |  | -> decltype( std::make_pair(std::make_move_iterator(it1), std::make_move_iterator(it2)))

inline

构造转移迭代器对。

自从
  build 337

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

被这些函数引用 make_move_iterator_pair().

这是这个函数的调用关系图:

## ◆ make_move_iterator_pair() [2/2]

template<typename _tRange >

auto ystdex::make_move_iterator_pair | ( | _tRange & | c | ) | -> decltype(ystdex::make_move_iterator_pair(c.begin(), c.end()))

inline

构造指定序列范围（包含序列容器及内建数组等）的转移迭代器对。

注解
  使用 ADL begin 和 end 指定范围迭代器。

Bug:
  decltype 指定的返回类型不能使用 ADL 。

自从
  build 337

在文件 iterator_op.hpp 第 153 行定义.

引用了 ystdex::cpp2017::begin(), CHRLib::c, ystdex::cpp2017::end() , 以及 make_move_iterator_pair().

函数调用图:

## ◆ make_obj_using_allocator()

template<typename _type , class _tAlloc , typename... _tParams>

_type ystdex::make_obj_using_allocator | ( | const _tAlloc & | a,
|  | _tParams &&... | args
| ) |  |

在文件 allocator.hpp 第 343 行定义.

引用了 YSLib::a, CHRLib::args , 以及 yforward.

## ◆ make_observer()

template<typename _type >

observer_ptr<_type> ystdex::make_observer | ( | _type * | p | ) |

inline

在文件 pointer.hpp 第 405 行定义.

引用了 platform::p.

被这些函数引用 YSLib::AccessNodePtr(), YSLib::ValueObject::AccessPtr(), YSLib::UI::Window::Add(), ystdex::pmr::resource_pool::chunk_t::add_free(), YSLib::UI::Caret::Caret(), YSLib::UI::DialogBox::DialogBox(), YSLib::UI::DoRequestFocus(), YSLib::UI::FetchTrace(), YSLib::UI::TabControl::Find(), YSLib::Drawing::FontCache::GetFontFamilyPtr(), platform_ex::Windows::GlobalLocked::GetPtr(), YSLib::GetValuePtrOf(), YSLib::UI::MenuHost::HideUnrelated(), YSLib::UI::ImplDeDtor(), YSLib::Drawing::FontCache::InitializeDefaultTypeface(), YSLib::UI::Invalidate(), YSLib::UI::InvalidateVisible(), YSLib::UI::IsFocusedCascade(), YSLib::UI::ListBox::ListBox(), YSLib::UI::LocateForTrace(), YSLib::UI::LocateForWidgetNode(), YSLib::Drawing::MultiBitmapData::LockPage(), NPL::Environment::LookupName(), YSLib::UI::Menu::Menu(), YSLib::UI::OnTouchHeld_DraggingRaw(), platform::HDirectory::operator++(), YSLib::UI::Panel::operator+=(), YSLib::UI::Window::operator+=(), YSLib::UI::TabBar::operator+=(), NPL::A1::QuerySourceInformation(), NPL::A1::QueryTailOperatorName(), YSLib::UI::ReleaseFocusFrom(), YSLib::UI::Restart(), YSLib::UI::ScrollableContainer::ScrollableContainer(), YSLib::UI::RadioBox::Select(), YSLib::UI::Menu::ShowSub(), YSLib::UI::TextList::TextList(), NPL::TryAccessLeaf() , 以及 YSLib::Devices::InputManager::Update().

这是这个函数的调用关系图:

## ◆ make_pun()

template<typename _type , typename _tObj , typename... _tParams>

pun_ptr<_type> ystdex::make_pun | ( | _tObj & | obj,
|  | _tParams &&... | args
| ) |  |

inline

构造避免严格别名分析限制的缓冲独占所有权指针指定的值初始化对象。

在文件 type_pun.hpp 第 279 行定义.

引用了 CHRLib::args, construct_within() , 以及 yforward.

函数调用图:

## ◆ make_pun_default()

template<typename _type , typename _tObj >

pun_ptr<_type> ystdex::make_pun_default | ( | _tObj & | obj | ) |

inline

构造避免严格别名分析限制的缓冲独占所有权指针指定的默认初始化对象。

自从
  build 717

在文件 type_pun.hpp 第 291 行定义.

引用了 construct_default_within().

函数调用图:

## ◆ make_ready_future() [1/3]

std::future<void> ystdex::make_ready_future | ( |  | ) |

inline

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

## ◆ make_ready_future() [2/3]

template<typename _type >

std::future<decay_t<_type> > ystdex::make_ready_future | ( | _type && | val | ) |

在文件 future.hpp 第 54 行定义.

## ◆ make_ready_future() [3/3]

template<typename _type >

std::future<_type> ystdex::make_ready_future | ( | std::exception_ptr | p | ) |

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

引用了 platform::p.

## ◆ make_string_view()

template<class _tString >

basic_string_view<typename string_traits<_tString>::value_type, typename string_traits<_tString>::traits_type> ystdex::make_string_view | ( | const _tString & | str | ) |

inline

从字符串创建 basic_string_view 对象。

自从
  build 861

在文件 string.hpp 第 814 行定义.

引用了 YSLib::Text::str.

被这些函数引用 NPL::DecodeNodeIndex(), NPL::A1::REPLContext::REPLContext() , 以及 YReader::ShlReader::SaveBookmarks().

这是这个函数的调用关系图:

## ◆ make_thunk()

template<typename _type >

enable_if_t<sizeof(invoke_result_t<_type>) != 0, details::thunk_call_proxy<_type> > ystdex::make_thunk | ( | const _type & | obj | ) |

待办事项:
  使用 ISO C++14 返回值推导，直接以 lambda 表达式实现。

在文件 thunk.hpp 第 175 行定义.

## ◆ make_transposed()

template<typename _tIter , typename _tSize = make_unsigned_t< typename std::iterator_traits<decay_t<_tIter>>::difference_type>, typename _tIndex = _tSize>

transposed_iterator<decay_t<_tIter> > ystdex::make_transposed | ( | _tIter && | i,
|  | _tSize | w,
|  | _tSize | h,
|  | _tIndex | idx
| ) |  |

inline

在文件 iterator.hpp 第 1083 行定义.

引用了 YSLib::i, YSLib::Drawing::w , 以及 yforward.

被这些函数引用 YSLib::Drawing::DispatchTranspose(), main() , 以及 YSLib::Drawing::UpdateTranposedPixels().

这是这个函数的调用关系图:

## ◆ make_unique() [4/4]

template<typename _type , typename _tElem >

std::unique_ptr<_type> ystdex::make_unique | ( | std::initializer_list< _tElem > | il | ) |

inline

使用指定类型的初始化列表构造指定类型的 std::unique_ptr 对象。

模板参数

  _tElem | 初始化列表的元素类型。

自从
  build 574

在文件 memory.hpp 第 810 行定义.

## ◆ make_unique_default_init() [1/3]

template<typename _type , typename... _tParams>

enable_if_t<!is_array<_type>::value, std::unique_ptr<_type> > ystdex::make_unique_default_init | ( |  | ) |

inline

注解
  使用默认初始化。

参见
  WG21 N3588 A4 。

自从
  build 526

在文件 memory.hpp 第 788 行定义.

被这些函数引用 ystdex::pmr::cpp2017::new_delete_resource() , 以及 YSLib::Drawing::HBitmap::operator CompactPixmap().

这是这个函数的调用关系图:

## ◆ make_unique_default_init() [2/3]

template<typename _type , typename... _tParams>

enable_if_t<extent<_type>::value != 0> ystdex::make_unique_default_init | ( | _tParams && | ... | ) |

delete

## ◆ make_unique_default_init() [3/3]

template<typename _type , typename... _tParams>

enable_if_t<is_array<_type>::value && extent<_type>::value == 0, std::unique_ptr<_type> > ystdex::make_unique_default_init | ( | size_t | size | ) |

inline

在文件 memory.hpp 第 795 行定义.

引用了 ystdex::cpp2017::size().

函数调用图:

## ◆ make_unique_with() [1/3]

template<typename _type , typename _tDeleter , typename... _tParams>

enable_if_t<is_array<_type>) && extent<_type>) != 0> ystdex::make_unique_with | ( | _tDeleter && | ,
|  | _tParams && | ...
| ) |  |

delete

## ◆ make_unique_with() [2/3]

template<typename _type , typename _tDeleter , typename... _tParams>

enable_if_t<!is_array<_type>::value, std::unique_ptr<_type, _tDeleter> > ystdex::make_unique_with | ( | _tDeleter && | d,
|  | _tParams &&... | args
| ) |  |

inline

注解
  使用删除器。

自从
  build 562
  build 843

在文件 memory.hpp 第 824 行定义.

引用了 CHRLib::args, CHRLib::d , 以及 yforward.

## ◆ make_unique_with() [3/3]

template<typename _type , typename _tDeleter , typename... _tParams>

enable_if_t<is_array<_type>) && extent<_type>) == 0, std::unique_ptr<_type> > ystdex::make_unique_with | ( | _tDeleter && | d,
|  | size_t | size
| ) |  |

inline

在文件 memory.hpp 第 832 行定义.

引用了 CHRLib::d, ystdex::cpp2017::size() , 以及 yforward.

函数调用图:

## ◆ make_weak()

template<typename _type >

std::weak_ptr<_type> ystdex::make_weak | ( | const std::shared_ptr< _type > & | p | ) |

inline

使用指定的 std::shared_ptr 实例的对象创建对应的 std::weak_ptr 实例的对象。

自从
  build 779

在文件 memory.hpp 第 866 行定义.

引用了 platform::p.

## ◆ narrow()

template<typename _tDst , typename _tSrc >

_tDst ystdex::narrow | ( | _tSrc | v | ) |

inline

注解
  使用 ADL narrow_cast 。

在文件 cast.hpp 第 137 行定义.

引用了 CHRLib::d , 以及 v.

## ◆ narrow_cast()

template<typename _tDst , typename _tSrc >

_tDst ystdex::narrow_cast | ( | _tSrc | v | ) |

inline

可能缩小数值范围的显式转换。

自从
  build 703

在文件 cast.hpp 第 122 行定义.

引用了 ystdex::cpp2014::max(), ystdex::cpp2014::min() , 以及 v.

函数调用图:

## ◆ native_byte_order()

byte_order ystdex::native_byte_order | ( |  | ) |

inline

测试本机字节序。

在文件 cstdint.hpp 第 78 行定义.

引用了 big, little, PDP, unknown, x , 以及 yconstexpr.

## ◆ native_little_bit_order()

bool ystdex::native_little_bit_order | ( |  | ) |

inline

测试本机位序。

在文件 cstdint.hpp 第 89 行定义.

引用了 platform::bool , 以及 ystdex::details::bit_order_tester::le.

## ◆ new_or_throw()

template<typename _type , typename... _tParams>

_type* ystdex::new_or_throw | ( | _tParams &&... | args | ) |

调用 new 表达式创建对象或抛出异常。

在文件 memory.hpp 第 137 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ next_if()

template<typename _tIn , typename _fPred >

_tIn ystdex::next_if | ( | _tIn | i,
|  | _fPred | f,
|  | typename std::iterator_traits< _tIn >::difference_type | n = `1`
| ) |  |

迭代器指向的值满足条件时取邻接迭代器，否则取原值。

参数

  i | 指定的迭代器。

前置条件
  迭代器可解引用，蕴含断言：满足 YB_VerifyIterator 。

在文件 iterator_op.hpp 第 55 行定义.

引用了 CHRLib::f(), YSLib::i, next , 以及 YB_VerifyIterator.

函数调用图:

## ◆ next_if_eq()

template<typename _tIn , typename _type >

_tIn ystdex::next_if_eq | ( | _tIn | i,
|  | const _type & | val,
|  | typename std::iterator_traits< _tIn >::difference_type | n = `1`
| ) |  |

在文件 iterator_op.hpp 第 63 行定义.

引用了 YSLib::i, next , 以及 YB_VerifyIterator.

被这些函数引用 YSLib::DS::UI::DualScreenReader::Execute(), YSLib::DS::UI::DualScreenReader::PutLastLine() , 以及 YSLib::DS::UI::DualScreenReader::UpdateView().

这是这个函数的调用关系图:

## ◆ nonnull_or() [1/3]

template<typename _type >

auto ystdex::nonnull_or | ( | _type && | p | ) | -> decay_t<decltype(std::forward<decltype( p )>( p ))>

inline

取非空引用或默认值。

自从
  build 749

在文件 deref_op.hpp 第 76 行定义.

引用了 platform::p , 以及 yforward.

## ◆ nonnull_or() [2/3]

template<typename _tOther , typename _type >

auto ystdex::nonnull_or | ( | _type && | p,
|  | _tOther && | other
| ) |  | -> decltype(p ? std::forward<decltype( p )>( p ) : std::forward<decltype( other )>( other ))

inline

自从
  build 750

在文件 deref_op.hpp 第 83 行定义.

引用了 CHRLib::CharSet::other, platform::p , 以及 yforward.

## ◆ nonnull_or() [3/3]

template<typename _tOther , typename _type , typename _tSentinal = nullptr_t>

auto ystdex::nonnull_or | ( | _type && | p,
|  | _tOther && | other,
|  | _tSentinal && | last
| ) |  | -> decltype(!bool(p == std::forward<decltype( last )>( last )) ? std::forward<decltype( p )>( p ) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 90 行定义.

引用了 platform::bool, CHRLib::CharSet::other, platform::p , 以及 yforward.

## ◆ normalize()

template<class _tString >

auto ystdex::normalize | ( | _tString & | str | ) | -> decltype(str.resize(ystdex::ntctslen(str.c_str())))

NTCTS 正规化：保留空字符之前的字符。

后置条件
  `str.length() == ystdex::ntctslen(str.c_str())` 。

自从
  build 606

在文件 string.hpp 第 1245 行定义.

引用了 ntctslen() , 以及 YSLib::Text::str.

函数调用图:

## ◆ not_widen()

template<typename _tDst , typename _tSrc >

_tDst ystdex::not_widen | ( | _tSrc | v | ) |

inline

注解
  使用 ADL not_widen_cast 。

在文件 cast.hpp 第 190 行定义.

引用了 CHRLib::d , 以及 v.

## ◆ not_widen_cast()

template<typename _tDst , typename _tSrc >

_tDst ystdex::not_widen_cast | ( | _tSrc | v | ) |

inline

可能缩小数值范围或数值范围最大和最小值保持不变的转换。

注解
  使用 ADL narrow_cast 。

在文件 cast.hpp 第 179 行定义.

引用了 ystdex::cpp2014::max(), ystdex::cpp2014::min() , 以及 v.

被这些函数引用 CHRLib::ImplRet().

函数调用图:
这是这个函数的调用关系图:

## ◆ ntctschr() [1/7]

template<typename _tChar >

_tChar* ystdex::ntctschr | ( | _tChar * | s,
|  | remove_const_t< _tChar > | c
| ) |  |

在简单 NTCTS 内查找字符。

前置条件
  断言： `s` 。

返回
  若未找到为空指针值，否则为指向第一个查找到的字符的指针值。

在文件 cstring.h 第 393 行定义.

引用了 CHRLib::c, is_null(), platform::p, CHRLib::s , 以及 yconstraint.

被这些函数引用 ntctschr() , 以及 platform::YB_NONNULL().

函数调用图:
这是这个函数的调用关系图:

## ◆ ntctschr() [2/7]

char* ystdex::ntctschr | ( | char * | s,
|  | char | c
| ) |  |

inline

在文件 cstring.h 第 402 行定义.

引用了 CHRLib::c, CHRLib::s , 以及 yconstraint.

## ◆ ntctschr() [3/7]

const char* ystdex::ntctschr | ( | const char * | s,
|  | char | c
| ) |  |

inline

在文件 cstring.h 第 408 行定义.

引用了 CHRLib::c, CHRLib::s , 以及 yconstraint.

## ◆ ntctschr() [4/7]

const uchar_t* ystdex::ntctschr | ( | const uchar_t * | s,
|  | uchar_t | c
| ) |  |

inline

在文件 cstring.h 第 432 行定义.

引用了 CHRLib::c, ntctschr() , 以及 CHRLib::s.

函数调用图:

## ◆ ntctschr() [5/7]

const wchar_t* ystdex::ntctschr | ( | const wchar_t * | s,
|  | wchar_t | c
| ) |  |

inline

在文件 cstring.h 第 420 行定义.

引用了 CHRLib::c, CHRLib::s , 以及 yconstraint.

## ◆ ntctschr() [6/7]

uchar_t* ystdex::ntctschr | ( | uchar_t * | s,
|  | uchar_t | c
| ) |  |

inline

在文件 cstring.h 第 426 行定义.

引用了 CHRLib::c, ntctschr() , 以及 CHRLib::s.

函数调用图:

## ◆ ntctschr() [7/7]

wchar_t* ystdex::ntctschr | ( | wchar_t * | s,
|  | wchar_t | c
| ) |  |

inline

在文件 cstring.h 第 414 行定义.

引用了 CHRLib::c, CHRLib::s , 以及 yconstraint.

## ◆ ntctscmp() [1/6]

template<typename _tChar >

int ystdex::ntctscmp | ( | const _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

按字典序比较简单 NTCTS 。

前置条件
  断言： `s1 && s2` 。

注解
  语义同 std::basic_string<_tChar>::compare ，但忽略指定长度。

在文件 cstring.h 第 154 行定义.

引用了 YSLib::IO::int, is_null(), yconstraint , 以及 yunseq.

被这些函数引用 ystdex::basic_tstring_view< _tChar, _tTraits, 0 >::compare(), platform::IsNodeShared() , 以及 ntctscmp().

函数调用图:
这是这个函数的调用关系图:

## ◆ ntctscmp() [2/6]

template<typename _tChar >

int ystdex::ntctscmp | ( | const _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

注解
  语义同 std::basic_string<_tChar>::compare 。

在文件 cstring.h 第 190 行定义.

引用了 yconstraint.

## ◆ ntctscmp() [3/6]

template<typename _tChar >

int ystdex::ntctscmp | ( | const _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n1,
|  | size_t | n2
| ) |  |

注解
  语义同 std::lexicographical_compare 。

在文件 cstring.h 第 198 行定义.

引用了 yconstraint.

## ◆ ntctscmp() [4/6]

int ystdex::ntctscmp | ( | const char * | s1,
|  | const char * | s2
| ) |  |

inline

自从
  build 658

在文件 cstring.h 第 166 行定义.

引用了 yconstraint.

## ◆ ntctscmp() [5/6]

int ystdex::ntctscmp | ( | const uchar_t * | s1,
|  | const uchar_t * | s2
| ) |  |

inline

在文件 cstring.h 第 180 行定义.

引用了 ntctscmp().

函数调用图:

## ◆ ntctscmp() [6/6]

int ystdex::ntctscmp | ( | const wchar_t * | s1,
|  | const wchar_t * | s2
| ) |  |

inline

在文件 cstring.h 第 173 行定义.

引用了 yconstraint.

## ◆ ntctscpy() [1/7]

template<typename _tChar >

enable_if_irreplaceable_char_t<_tChar, _tChar*> ystdex::ntctscpy | ( | _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

复制 NTCTS 。

前置条件
  复制的 NTCTS 存储不重叠。

在文件 cstring.h 第 250 行定义.

引用了 is_null() , 以及 yconstraint.

被这些函数引用 ntctscpy() , 以及 platform::ugetcwd().

函数调用图:
这是这个函数的调用关系图:

## ◆ ntctscpy() [2/7]

template<typename _tChar , typename = enable_if_replaceable_t<_tChar, char>>

_tChar* ystdex::ntctscpy | ( | _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

inline

在文件 cstring.h 第 284 行定义.

引用了 ntctscpy() , 以及 replace_cast().

函数调用图:

## ◆ ntctscpy() [3/7]

template<typename _tChar >

enable_if_replaceable_t<_tChar, wchar_t, _tChar*> ystdex::ntctscpy | ( | _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

inline

在文件 cstring.h 第 291 行定义.

引用了 ntctscpy() , 以及 replace_cast().

函数调用图:

## ◆ ntctscpy() [4/7]

template<typename _tChar >

_tChar* ystdex::ntctscpy | ( | _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

复制确定源长度的 NTCTS 。

在文件 cstring.h 第 300 行定义.

引用了 yconstraint , 以及 yunseq.

## ◆ ntctscpy() [5/7]

char* ystdex::ntctscpy | ( | char * | s1,
|  | const char * | s2
| ) |  |

inline

在文件 cstring.h 第 262 行定义.

引用了 yconstraint.

## ◆ ntctscpy() [6/7]

wchar_t* ystdex::ntctscpy | ( | uchar_t * | s1,
|  | const uchar_t * | s2
| ) |  |

inline

在文件 cstring.h 第 276 行定义.

引用了 ntctscpy().

函数调用图:

## ◆ ntctscpy() [7/7]

wchar_t* ystdex::ntctscpy | ( | wchar_t * | s1,
|  | const wchar_t * | s2
| ) |  |

inline

在文件 cstring.h 第 269 行定义.

引用了 yconstraint.

## ◆ ntctsfind()

template<typename _tChar >

size_t ystdex::ntctsfind | ( | const _tChar * | s,
|  | size_t | n,
|  | _tChar | c
| ) |  |

inline

在简单 NTCTS 的指定前若干字符内查找字符。

前置条件
  `[s, s + n)` 有效。

注解
  语义同 std::char_traits<_tChar>::find 。

在文件 cstring.h 第 445 行定义.

引用了 CHRLib::c, CHRLib::s , 以及 yconstraint.

被这些函数引用 ntctslen().

这是这个函数的调用关系图:

## ◆ ntctsicmp() [1/2]

template<typename _tChar >

int ystdex::ntctsicmp | ( | const _tChar * | s1,
|  | const _tChar * | s2
| ) |  |

按字典序比较简单 NTCTS （忽略大小写）。

注解
  语义同 std::basic_string<_tChar>::compare ，但忽略指定长度和大小写， 使用字符串结束符判断结束。

在文件 cstring.h 第 213 行定义.

引用了 YSLib::IO::int, is_null(), towlower(), yconstraint , 以及 yunseq.

函数调用图:

## ◆ ntctsicmp() [2/2]

template<typename _tChar >

int ystdex::ntctsicmp | ( | const _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

按字典序比较不超过指定长度的简单 NTCTS （忽略大小写）。

注解
  语义同 std::basic_string<_tChar>::compare ，但忽略大小写， 使用字符串结束符判断结束。

在文件 cstring.h 第 229 行定义.

引用了 CHRLib::d, YSLib::IO::int, is_null(), tolower(), yconstraint , 以及 yunseq.

函数调用图:

## ◆ ntctslen() [1/2]

template<typename _tChar >

size_t ystdex::ntctslen | ( | const _tChar * | s | ) |

inline

计算简单 NTCTS 长度。

注解
  语义同 std::char_traits<_tChar>::length 。

在文件 cstring.h 第 456 行定义.

引用了 CHRLib::s , 以及 yconstraint.

被这些函数引用 platform::FAT::LFN::ConvertToAlias(), platform::FAT::LFN::ConvertToMBCS(), CHRLib::Transcoding< _vFrom, _vTo, _tDispatcher >::MakeTranscoded(), CHRLib::Transcoding< _vFrom, CharSet::Null, _tDispatcher >::MakeTranscoded(), normalize() , 以及 string_end().

这是这个函数的调用关系图:

## ◆ ntctslen() [2/2]

template<typename _tChar >

size_t ystdex::ntctslen | ( | const _tChar * | s,
|  | size_t | n
| ) |  |

inline

计算不超过指定长度的简单 NTCTS 长度。

在文件 cstring.h 第 463 行定义.

引用了 ntctsfind() , 以及 CHRLib::s.

函数调用图:

## ◆ ntctsmove()

template<typename _tChar >

_tChar* ystdex::ntctsmove | ( | _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

转移 NTCTS 。

注解
  复制可能重叠的 NTCTS 存储。

在文件 cstring.h 第 376 行定义.

引用了 yconstraint , 以及 yunseq.

## ◆ ntctsncpy() [1/8]

template<typename _tChar >

enable_if_irreplaceable_char_t<_tChar, _tChar*> ystdex::ntctsncpy | ( | _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

复制不超过指定长度的 NTCTS 。

注解
  目标字符串短于指定长度的部分会被填充空字符。

警告
  源字符串在指定长度内没有空字符则目标字符串不以空字符结尾。

在文件 cstring.h 第 315 行定义.

引用了 is_null() , 以及 yconstraint.

被这些函数引用 ntctsncpy().

函数调用图:
这是这个函数的调用关系图:

## ◆ ntctsncpy() [2/8]

template<typename _tChar , typename = enable_if_replaceable_t<_tChar, char>>

_tChar* ystdex::ntctsncpy | ( | _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

inline

在文件 cstring.h 第 355 行定义.

引用了 ntctsncpy() , 以及 replace_cast().

函数调用图:

## ◆ ntctsncpy() [3/8]

template<typename _tChar >

enable_if_replaceable_t<_tChar, wchar_t, _tChar*> ystdex::ntctsncpy | ( | _tChar * | s1,
|  | const _tChar * | s2,
|  | size_t | n
| ) |  |

inline

在文件 cstring.h 第 362 行定义.

引用了 ntctsncpy() , 以及 replace_cast().

函数调用图:

## ◆ ntctsncpy() [4/8]

template<class _tString , typename = ystdex::enable_for_string_class_t<_tString>>

_tString&& ystdex::ntctsncpy | ( | _tString && | str,
|  | _tString && | s,
|  | const typename string_traits< _tString >::size_type | n
| ) |  |

inline

在文件 string.hpp 第 1270 行定义.

引用了 YSLib::IO::_tString, CHRLib::s, YSLib::Text::str , 以及 yforward.

## ◆ ntctsncpy() [5/8]

template<class _tString , typename = ystdex::enable_for_string_class_t<_tString>>

_tString&& ystdex::ntctsncpy | ( | _tString && | str,
|  | const typename string_traits< _tString >::const_pointer | s,
|  | const typename string_traits< _tString >::size_type | n
| ) |  |

inline

复制不超过指定长度的 NTCTS 。

注解
  目标字符串短于指定长度的部分可能被填充空字符。

警告
  源字符串在指定长度内没有空字符则目标字符串不保证以空字符结尾。

自从
  build 604

前置条件
  断言：指针参数非空。

在文件 string.hpp 第 1261 行定义.

引用了 YSLib::IO::_tString, CHRLib::s, YSLib::Text::str , 以及 yconstraint.

## ◆ ntctsncpy() [6/8]

char* ystdex::ntctsncpy | ( | char * | s1,
|  | const char * | s2,
|  | size_t | n
| ) |  |

inline

在文件 cstring.h 第 333 行定义.

引用了 yconstraint.

## ◆ ntctsncpy() [7/8]

wchar_t* ystdex::ntctsncpy | ( | uchar_t * | s1,
|  | const uchar_t * | s2,
|  | size_t | n
| ) |  |

inline

在文件 cstring.h 第 347 行定义.

引用了 ntctsncpy().

函数调用图:

## ◆ ntctsncpy() [8/8]

wchar_t* ystdex::ntctsncpy | ( | wchar_t * | s1,
|  | const wchar_t * | s2,
|  | size_t | n
| ) |  |

inline

在文件 cstring.h 第 340 行定义.

引用了 yconstraint.

## ◆ openmode_conv() [1/2]

std::ios_base::openmode ystdex::openmode_conv | ( | const char * | str | ) |

ISO C/C++ 标准输入输出接口打开模式转换。

返回
  若失败（包括空参数情形）为 std::ios_base::openmode() ，否则为对应的值。

参见
  ISO C11 7.21.5.3/3 。

注解
  顺序严格限定。
  支持 x 转换。

自从
  build 326

在文件 cstdio.cpp 第 95 行定义.

引用了 platform::l, platform::p, YSLib::Text::str , 以及 yunseq.

## ◆ openmode_conv() [2/2]

const char * ystdex::openmode_conv | ( | std::ios_base::openmode | mode | ) |

ISO C/C++ 标准输入输出接口打开模式转换。

自从
  build 326

参见
  ISO C++11 Table 132 。

注解
  忽略 std::ios_base::ate 。
  返回值未指定，但返回值指向的内容是确定的，且无副作用，因此可用 YB_STATELESS 。

参见
  LWG 596 。

在文件 cstdio.cpp 第 68 行定义.

被这些函数引用 platform::ufopen().

这是这个函数的调用关系图:

## ◆ operator!=() [2/7]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator!= | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 562 行定义.

## ◆ operator!=() [3/7]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator!= | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 562 行定义.

## ◆ operator!=() [4/7]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator!= | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 562 行定义.

## ◆ operator!=() [7/7]

template<typename _type1 , typename _type2 >

bool ystdex::operator!= | ( | observer_ptr< _type1 > | p1,
|  | observer_ptr< _type2 > | p2
| ) |  |

inline

在文件 pointer.hpp 第 384 行定义.

引用了 YSLib::Drawing::p1 , 以及 YSLib::Drawing::p2.

## ◆ operator*() [1/3]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

enable_if_t<is_arithmetic<_type>::value, common_type_t<_type, fixed_point<_tBase, _vInt, _vFrac> > > ystdex::operator* | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 534 行定义.

## ◆ operator*() [2/3]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

enable_if_t<is_arithmetic<_type>::value, common_type_t< fixed_point<_tBase, _vInt, _vFrac> , _type> > ystdex::operator* | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 534 行定义.

## ◆ operator*() [3/3]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

common_type_t< fixed_point<_tBase1, _vInt1, _vFrac1> , fixed_point<_tBase2, _vInt2, _vFrac2> > ystdex::operator* | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 534 行定义.

## ◆ operator+() [1/3]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

enable_if_t<is_arithmetic<_type>::value, common_type_t<_type, fixed_point<_tBase, _vInt, _vFrac> > > ystdex::operator+ | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 532 行定义.

## ◆ operator+() [2/3]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

enable_if_t<is_arithmetic<_type>::value, common_type_t< fixed_point<_tBase, _vInt, _vFrac> , _type> > ystdex::operator+ | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 532 行定义.

## ◆ operator+() [3/3]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

common_type_t< fixed_point<_tBase1, _vInt1, _vFrac1> , fixed_point<_tBase2, _vInt2, _vFrac2> > ystdex::operator+ | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 532 行定义.

## ◆ operator-() [1/3]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

enable_if_t<is_arithmetic<_type>::value, common_type_t<_type, fixed_point<_tBase, _vInt, _vFrac> > > ystdex::operator- | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 533 行定义.

## ◆ operator-() [2/3]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

enable_if_t<is_arithmetic<_type>::value, common_type_t< fixed_point<_tBase, _vInt, _vFrac> , _type> > ystdex::operator- | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 533 行定义.

## ◆ operator-() [3/3]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

common_type_t< fixed_point<_tBase1, _vInt1, _vFrac1> , fixed_point<_tBase2, _vInt2, _vFrac2> > ystdex::operator- | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 533 行定义.

## ◆ operator/() [1/3]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

enable_if_t<is_arithmetic<_type>::value, common_type_t<_type, fixed_point<_tBase, _vInt, _vFrac> > > ystdex::operator/ | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 535 行定义.

## ◆ operator/() [2/3]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

enable_if_t<is_arithmetic<_type>::value, common_type_t< fixed_point<_tBase, _vInt, _vFrac> , _type> > ystdex::operator/ | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 535 行定义.

## ◆ operator/() [3/3]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

common_type_t< fixed_point<_tBase1, _vInt1, _vFrac1> , fixed_point<_tBase2, _vInt2, _vFrac2> > ystdex::operator/ | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 535 行定义.

## ◆ operator<() [3/15]

template<typename _tChar , class _tTraits >

bool ystdex::operator< | ( | basic_tstring_view< _tChar, _tTraits > | x,
|  | basic_tstring_view< _tChar, _tTraits > | y
| ) |  |

inline

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

引用了 x , 以及 YSLib::UI::y.

## ◆ operator<() [4/15]

template<typename _tChar , class _tTraits >

bool ystdex::operator< | ( | basic_tstring_view< _tChar, _tTraits > | x,
|  | decay_t< basic_tstring_view< _tChar, _tTraits >> | y
| ) |  |

inline

在文件 tstring_view.hpp 第 267 行定义.

引用了 x , 以及 YSLib::UI::y.

## ◆ operator<() [6/15]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator< | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 563 行定义.

## ◆ operator<() [7/15]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator< | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 563 行定义.

## ◆ operator<() [8/15]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator< | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 563 行定义.

## ◆ operator<() [13/15]

template<typename _tChar , class _tTraits >

bool ystdex::operator< | ( | decay_t< basic_tstring_view< _tChar, _tTraits >> | x,
|  | basic_tstring_view< _tChar, _tTraits > | y
| ) |  |

inline

在文件 tstring_view.hpp 第 274 行定义.

## ◆ operator<() [15/15]

template<typename _type1 , typename _type2 >

bool ystdex::operator< | ( | observer_ptr< _type1 > | p1,
|  | observer_ptr< _type2 > | p2
| ) |  |

inline

在文件 pointer.hpp 第 390 行定义.

引用了 YSLib::Drawing::p1 , 以及 YSLib::Drawing::p2.

## ◆ operator<<() [2/2]

template<typename _tChar , class _tTraits >

std::basic_ostream<_tChar, _tTraits>& ystdex::operator<< | ( | std::basic_ostream< _tChar, _tTraits > & | os,
|  | basic_tstring_view< _tChar, _tTraits > | str
| ) |  |

在文件 tstring_view.hpp 第 274 行定义.

引用了 x , 以及 YSLib::UI::y.

## ◆ operator<=() [2/6]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator<= | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 564 行定义.

## ◆ operator<=() [3/6]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator<= | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 564 行定义.

## ◆ operator<=() [4/6]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator<= | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 564 行定义.

## ◆ operator==() [2/10]

template<typename _tChar , class _tTraits >

bool ystdex::operator== | ( | basic_tstring_view< _tChar, _tTraits > | x,
|  | decay_t< basic_tstring_view< _tChar, _tTraits >> | y
| ) |  |

inline

在文件 tstring_view.hpp 第 246 行定义.

引用了 x , 以及 YSLib::UI::y.

## ◆ operator==() [4/10]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator== | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 561 行定义.

## ◆ operator==() [5/10]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator== | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 561 行定义.

## ◆ operator==() [6/10]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator== | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 561 行定义.

## ◆ operator==() [10/10]

template<typename _tChar , class _tTraits >

bool ystdex::operator== | ( | decay_t< basic_tstring_view< _tChar, _tTraits >> | x,
|  | basic_tstring_view< _tChar, _tTraits > | y
| ) |  |

inline

在文件 tstring_view.hpp 第 253 行定义.

引用了 x , 以及 YSLib::UI::y.

## ◆ operator>() [2/6]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator> | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 565 行定义.

## ◆ operator>() [3/6]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator> | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 565 行定义.

## ◆ operator>() [4/6]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator> | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 565 行定义.

## ◆ operator>=() [2/6]

template<typename _type , typename _tBase , size_t _vInt, size_t _vFrac>

bool ystdex::operator>= | ( | const _type & | x,
|  | const fixed_point< _tBase, _vInt, _vFrac > & | y
| ) |  |

inline

在文件 rational.hpp 第 566 行定义.

## ◆ operator>=() [3/6]

template<typename _tBase , size_t _vInt, size_t _vFrac, typename _type >

bool ystdex::operator>= | ( | const fixed_point< _tBase, _vInt, _vFrac > & | x,
|  | const _type & | y
| ) |  |

inline

在文件 rational.hpp 第 566 行定义.

## ◆ operator>=() [4/6]

template<typename _tBase1 , size_t _vInt1, size_t _vFrac1, typename _tBase2 , size_t _vInt2, size_t _vFrac2>

bool ystdex::operator>= | ( | const fixed_point< _tBase1, _vInt1, _vFrac1 > & | x,
|  | const fixed_point< _tBase2, _vInt2, _vFrac2 > & | y
| ) |  |

inline

在文件 rational.hpp 第 566 行定义.

## ◆ operator|() [1/4]

template<typename _tIter >

auto ystdex::operator| | ( | _tIter && | i,
|  | first_tag |
| ) |  | -> decltype(make_transform(std::forward<decltype( i )>( i ), iterator_transformation::first<>()))

inline

管道匹配操作符。

注解
  使用 ADL make_transform 。

自从
  build 650

在文件 iterator.hpp 第 576 行定义.

引用了 YSLib::i , 以及 yforward.

## ◆ operator|() [2/4]

template<typename _tIter >

auto ystdex::operator| | ( | _tIter && | i,
|  | get_get_t |
| ) |  | -> decltype(make_transform(std::forward<decltype( i )>( i ), iterator_transformation::get<>()))

inline

自从
  build 680

在文件 iterator.hpp 第 599 行定义.

引用了 YSLib::i , 以及 yforward.

## ◆ operator|() [3/4]

template<typename _tIter >

auto ystdex::operator| | ( | _tIter && | i,
|  | get_indirect_t |
| ) |  | -> decltype(make_transform(std::forward<decltype( i )>( i ), iterator_transformation::indirect<>()))

inline

自从
  build 680

在文件 iterator.hpp 第 591 行定义.

引用了 YSLib::i , 以及 yforward.

## ◆ operator|() [4/4]

template<typename _tIter >

auto ystdex::operator| | ( | _tIter && | i,
|  | second_tag |
| ) |  | -> decltype(make_transform(std::forward<decltype( i )>( i ), iterator_transformation::second<>()))

inline

在文件 iterator.hpp 第 583 行定义.

引用了 YSLib::i , 以及 yforward.

## ◆ owns_any() [1/4]

template<typename _type >

bool ystdex::owns_any | ( | _type *const & |  | ) |

inline

在文件 memory.hpp 第 482 行定义.

## ◆ owns_any() [2/4]

template<typename _type >

bool ystdex::owns_any | ( | const std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 495 行定义.

引用了 platform::p.

## ◆ owns_any() [3/4]

template<typename _type , typename _fDeleter >

bool ystdex::owns_any | ( | const std::unique_ptr< _type, _fDeleter > & | p | ) |

inline

自从
  build 550

在文件 memory.hpp 第 489 行定义.

引用了 platform::bool , 以及 platform::p.

## ◆ owns_any() [4/4]

template<typename _type >

bool ystdex::owns_any | ( | const std::weak_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 501 行定义.

引用了 platform::p.

## ◆ owns_nonnull() [1/4]

template<typename _type >

bool ystdex::owns_nonnull | ( | _type *const & |  | ) |

inline

在文件 memory.hpp 第 514 行定义.

## ◆ owns_nonnull() [2/4]

template<typename _type >

bool ystdex::owns_nonnull | ( | const std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 527 行定义.

引用了 platform::bool , 以及 platform::p.

## ◆ owns_nonnull() [3/4]

template<typename _type , typename _fDeleter >

bool ystdex::owns_nonnull | ( | const std::unique_ptr< _type, _fDeleter > & | p | ) |

inline

自从
  build 550

在文件 memory.hpp 第 521 行定义.

引用了 platform::bool , 以及 platform::p.

## ◆ owns_nonnull() [4/4]

template<typename _type >

bool ystdex::owns_nonnull | ( | const std::weak_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 533 行定义.

引用了 platform::bool , 以及 platform::p.

## ◆ owns_unique() [1/4]

template<typename _type >

bool ystdex::owns_unique | ( | const _type & |  | ) |

inline

在文件 memory.hpp 第 546 行定义.

## ◆ owns_unique() [2/4]

template<typename _type >

bool ystdex::owns_unique | ( | const std::shared_ptr< _type > & | p | ) |

inline

注解
  返回 true 不一定表示指针非空。

在文件 memory.hpp 第 559 行定义.

引用了 platform::p.

## ◆ owns_unique() [3/4]

template<typename _type , class _tDeleter >

bool ystdex::owns_unique | ( | const std::unique_ptr< _type, _tDeleter > & | p | ) |

inline

在文件 memory.hpp 第 552 行定义.

引用了 platform::bool , 以及 platform::p.

## ◆ owns_unique() [4/4]

template<typename _type >

bool ystdex::owns_unique | ( | const std::weak_ptr< _type > & | p | ) |

inline

自从
  build 784

在文件 memory.hpp 第 566 行定义.

引用了 platform::p.

## ◆ owns_unique_nonnull() [1/4]

template<typename _type >

bool ystdex::owns_unique_nonnull | ( | const _type & |  | ) |

inline

在文件 memory.hpp 第 573 行定义.

## ◆ owns_unique_nonnull() [2/4]

template<typename _type >

bool ystdex::owns_unique_nonnull | ( | const std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 588 行定义.

引用了 platform::p , 以及 yconstraint.

## ◆ owns_unique_nonnull() [3/4]

template<typename _type , class _tDeleter >

bool ystdex::owns_unique_nonnull | ( | const std::unique_ptr< _type, _tDeleter > & | p | ) |

inline

前置条件
  参数非空。

在文件 memory.hpp 第 581 行定义.

引用了 platform::p , 以及 yconstraint.

## ◆ owns_unique_nonnull() [4/4]

template<typename _type >

bool ystdex::owns_unique_nonnull | ( | const std::weak_ptr< _type > & | p | ) |

inline

自从
  build 784

在文件 memory.hpp 第 596 行定义.

引用了 platform::p , 以及 yconstraint.

## ◆ pack_object()

template<typename _type , typename... _tParams>

auto ystdex::pack_object | ( | _tParams &&... | args | ) | -> decltype( details::pack_obj_impl<_type>::pack(std::forward<decltype( args )>( args )...) )

打包对象：通过指定参数构造对象。

自从
  build 588
  build 617

对 std::unique_ptr 和 std::shared_ptr 的实例，使用 make_unique 和 std::make_shared 构造，否则直接使用参数构造。

在文件 memory.hpp 第 1253 行定义.

引用了 CHRLib::args, ystdex::details::pack_obj_impl< _type >::pack() , 以及 yforward.

函数调用图:

## ◆ pack_shared_task()

template<typename _fCallable , typename... _tParams>

std::shared_ptr<packed_task_t<_fCallable&&, _tParams&&...> > ystdex::pack_shared_task | ( | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

在文件 future.hpp 第 106 行定义.

引用了 YSLib::_tParams, CHRLib::args, CHRLib::f(), make_shared() , 以及 yforward.

函数调用图:

## ◆ pack_task()

template<typename _fCallable , typename... _tParams>

packed_task_t<_fCallable&&, _tParams&&...> ystdex::pack_task | ( | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

自从
  build 359

在文件 future.hpp 第 98 行定义.

引用了 YSLib::_tParams, CHRLib::args, CHRLib::f() , 以及 yforward.

被这些函数引用 ystdex::thread_pool::wait_to_enqueue().

函数调用图:
这是这个函数的调用关系图:

## ◆ pack_uint()

template<size_t _vWidth, typename _tIn >

make_width_int<_vWidth>::unsigned_type ystdex::pack_uint | ( | _tIn | first,
|  | _tIn | last
| ) |  |

使用迭代器对指定的范围中的字节表示的序列构造无符号整数。

前置条件
  静态断言：整数宽度非零且为 byte 类型宽度的整数倍。
  范围中的迭代器可解引用。

自从
  build 603

在文件 cstdint.hpp 第 469 行定义.

引用了 x, YSLib::UI::y , 以及 YB_VerifyIterator.

## ◆ parameterize_static_object() [1/2]

template<typename _type , typename , typename... >

_type& ystdex::parameterize_static_object | ( |  | ) |

inline

类型参数化静态对象。

警告
  不可重入。
  非线程安全。

自从
  build 303

在文件 utility.hpp 第 232 行定义.

被这些函数引用 YSLib::GLocalStaticCache< _type, _tPointer >::GetStaticPtrRef().

这是这个函数的调用关系图:

## ◆ parameterize_static_object() [2/2]

template<typename _type , size_t... >

_type& ystdex::parameterize_static_object | ( |  | ) |

非类型参数化静态对象。

注解
  适合代替参数重复出现或需要作为公开接口的块作用域 static 声明。

警告
  不可重入。
  非线程安全。

自从
  build 301

在文件 utility.hpp 第 247 行定义.

## ◆ polymorphic_cast()

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_cast | ( | _tSrc * | v | ) |

inline

多态类指针类型转换。

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。

异常

  std::bad_cast | dynamic_cast 失败。

自从
  build 175

在文件 cast.hpp 第 213 行定义.

引用了 platform::p , 以及 v.

## ◆ polymorphic_crosscast() [1/3]

template<typename _rDst , class _tSrc >

enable_if_t<!is_reference<_tSrc>::value, _rDst> ystdex::polymorphic_crosscast | ( | _tSrc && | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是右值引用。

自从
  build 496

在文件 cast.hpp 第 360 行定义.

引用了 v.

## ◆ polymorphic_crosscast() [2/3]

template<typename _rDst , class _tSrc >

_rDst ystdex::polymorphic_crosscast | ( | _tSrc & | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是左值引用。

自从
  build 496

在文件 cast.hpp 第 343 行定义.

引用了 addressof() , 以及 v.

函数调用图:

## ◆ polymorphic_crosscast() [3/3]

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_crosscast | ( | _tSrc * | v | ) |

inline

多态类指针交叉转换。

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。
  断言： dynamic_cast 成功。

返回
  非空结果。

注解
  空指针作为参数一定失败。

自从
  build 179

在文件 cast.hpp 第 325 行定义.

引用了 platform::p, v , 以及 yassume.

## ◆ polymorphic_downcast() [1/5]

template<typename _rDst , class _tSrc >

enable_if_t< is_rvalue_reference<_rDst>::value && !is_reference<_tSrc>::value, _rDst> ystdex::polymorphic_downcast | ( | _tSrc && | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是右值引用。

在文件 cast.hpp 第 269 行定义.

引用了 v.

## ◆ polymorphic_downcast() [2/5]

template<typename _rDst , class _tSrc >

enable_if_t<is_lvalue_reference<_rDst>::value, _rDst> ystdex::polymorphic_downcast | ( | _tSrc & | v | ) |

inline

模板参数

  _tSrc | 源类型。
  _rDst | 目标类型。

前置条件
  静态断言： _rDst 是左值引用。

在文件 cast.hpp 第 256 行定义.

引用了 addressof() , 以及 v.

函数调用图:

## ◆ polymorphic_downcast() [3/5]

template<typename _pDst , class _tSrc >

_pDst ystdex::polymorphic_downcast | ( | _tSrc * | v | ) |

inline

多态类指针向派生类指针转换。

自从
  build 674

模板参数

  _tSrc | 源类型。
  _pDst | 目标类型。

前置条件
  静态断言： _tSrc 是多态类。
  静态断言： _pDst 是内建指针。
  静态断言： _tSrc 是 _pDst 指向的类去除修饰符后的基类。
  断言： dynamic_cast 成功。

在文件 cast.hpp 第 238 行定义.

引用了 v , 以及 YAssert.

## ◆ polymorphic_downcast() [4/5]

template<class _tDst , typename _tSrc >

enable_if_t<!is_reference<_tDst>::value && !is_array<_tDst>::value, std::shared_ptr<_tDst> > ystdex::polymorphic_downcast | ( | const std::unique_ptr< _tSrc > & | v | ) |

inline

模板参数

  _tSrc | 源的元素类型。
  _tDst | 目标的元素类型。

前置条件
  _tDst 可通过 `get()` 取得的指针和删除器右值构造。

在文件 cast.hpp 第 303 行定义.

引用了 v , 以及 YAssert.

## ◆ polymorphic_downcast() [5/5]

template<class _tDst , typename _tSrc , typename _tDeleter >

enable_if_t<!is_reference<_tDst>::value && !is_array<_tDst>::value, std::unique_ptr<_tDst, _tDeleter> > ystdex::polymorphic_downcast | ( | std::unique_ptr< _tSrc, _tDeleter > && | v | ) |

inline

模板参数

  _tSrc | 源的元素类型。
  _tDst | 目标的元素类型。
  _tDeleter | 删除器类型。

前置条件
  _tDst 可通过 `release()` 取得的指针和删除器右值构造。
  断言：调用 polymorphic_downcast 转换 `release()` 取得的指针保证无异常抛出。

注解
  使用 ADL 调用 polymorphic_downcast 转换 `release()` 取得的指针。

在文件 cast.hpp 第 284 行定义.

引用了 v, yassume , 以及 ynoexcept_assert.

## ◆ pop_back_val()

template<class _tCon >

bool ystdex::pop_back_val | ( | _tCon & | con,
|  | const typename _tCon::value_type & | value
| ) |  |

若容器末尾存在指定值的元素则移除。

自从
  build 885

前置条件
  容器支持无异常抛出的 empty 、back 和 pop_back 操作。

在文件 container.hpp 第 692 行定义.

## ◆ pop_front_val()

template<class _tCon >

bool ystdex::pop_front_val | ( | _tCon & | con,
|  | const typename _tCon::value_type & | value
| ) |  |

若容器起始存在指定值的元素则移除。

前置条件
  容器支持无异常抛出的 empty 、front 和 pop_front 操作。

在文件 container.hpp 第 708 行定义.

## ◆ pow_int()

template<typename _type >

_type ystdex::pow_int | ( | _type | x,
|  | size_t | n
| ) |  |

inline

计算整数次幂。

在文件 rational.hpp 第 90 行定义.

引用了 x.

## ◆ prev_if()

template<typename _tBi , typename _fPred >

_tBi ystdex::prev_if | ( | _tBi | i,
|  | _fPred | f,
|  | typename std::iterator_traits< _tBi >::difference_type | n = `1`
| ) |  |

迭代器指向的值满足条件时取反向邻接迭代器，否则取原值。

前置条件
  迭代器可解引用。

在文件 iterator_op.hpp 第 78 行定义.

引用了 CHRLib::f() , 以及 YSLib::i.

函数调用图:

## ◆ prev_if_eq()

template<typename _tBi , typename _type >

_tBi ystdex::prev_if_eq | ( | _tBi | i,
|  | const _type & | val,
|  | typename std::iterator_traits< _tBi >::difference_type | n = `1`
| ) |  |

在文件 iterator_op.hpp 第 85 行定义.

引用了 YSLib::i.

## ◆ pvoid() [1/2]

template<typename _type >

enable_if_t<or_<is_object<_type>, is_void<_type> >::value, void*> ystdex::pvoid | ( | _type * | p | ) |

inline

取 `void*` 类型的指针。

注解
  适合 std::fprintf 等的 `p` 转换规格。

警告
  若参数指向 const 对象，使用返回值修改指向的左值，或在占据的存储上 重新分配对象，会引起未定义行为。

自从
  build 563

在文件 addressof.hpp 第 166 行定义.

引用了 platform::p.

被这些函数引用 ystdex::any_ops::value_handler< _tHolder >::manage(), ystdex::any_ops::ref_handler< _type >::manage(), ystdex::any_ops::holder_handler< _tHolder >::manage(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::manage(), ystdex::any_ops::allocator_holder_handler< _tByteAlloc, _tHolder >::manage() , 以及 pvoid_ref().

这是这个函数的调用关系图:

## ◆ pvoid() [2/2]

template<typename _type >

enable_if_t<is_function<_type>::value, void*> ystdex::pvoid | ( | _type * | p | ) |

inline

注解
  ISO C++11 指定函数指针 `reinterpret_cast` 为对象指针有条件支持。

在文件 addressof.hpp 第 173 行定义.

引用了 platform::p.

## ◆ pvoid_ref()

template<typename _type >

void* ystdex::pvoid_ref | ( | _type && | ref | ) |

inline

返回
  非空指针。

自从
  build 552

在文件 addressof.hpp 第 184 行定义.

引用了 addressof(), pvoid() , 以及 ref().

函数调用图:

## ◆ quad()

template<typename _type >

_type ystdex::quad | ( | _type | x | ) |

inline

计算四次方。

在文件 rational.hpp 第 115 行定义.

引用了 square() , 以及 x.

函数调用图:

## ◆ qualify()

template<typename _tSrc , typename _tDst = const decay_t<_tSrc>&&>

_tDst ystdex::qualify | ( | _tSrc && | arg | ) |

inline

允许添加限定符转换。

前置条件
  源类型和目标类型退化后相同。

注解
  指定源类型优先，可自动推导目标类型。

参见
  as_const

自从
  build 531

在文件 cast.hpp 第 56 行定义.

## ◆ quote() [1/3]

template<typename _tString , typename _tPrefix , typename _tSuffix >

auto ystdex::quote | ( | _tString && | str,
|  | _tPrefix && | pfx,
|  | _tSuffix && | sfx
| ) |  | -> decltype(std::forward<decltype( pfx )>( pfx ) + std::forward<decltype( str )>( str ) + std::forward<decltype( sfx )>( sfx ))

inline

在文件 string.hpp 第 1593 行定义.

引用了 pfx, YSLib::Text::str , 以及 yforward.

## ◆ quote() [2/3]

template<typename _tString , typename _tString2 >

enable_if_t<!is_convertible<_tString2, typename string_traits<decay_t<_tString> >::value_type>::value, decay_t<_tString> > ystdex::quote | ( | _tString && | str,
|  | const _tString2 & | s
| ) |  |

inline

在文件 string.hpp 第 1587 行定义.

引用了 CHRLib::s, YSLib::Text::str , 以及 yforward.

## ◆ quote() [3/3]

template<typename _tString >

decay_t<_tString> ystdex::quote | ( | _tString && | str,
|  | typename string_traits< decay_t< _tString >>::value_type | c = `typename string_traits<decay_t<_tString>>::value_type('"')`
| ) |  |

inline

取添加前缀和后缀的字符串。

前置条件
  断言：删除的字符串不大于串长。

自从
  build 801

在文件 string.hpp 第 1579 行定义.

引用了 CHRLib::c, YSLib::Text::str , 以及 yforward.

被这些函数引用 NPL::SXML::ConvertDocumentNode(), NPL::EscapeLiteral(), NPL::Literalize(), YReader::ShlReader::LoadBookmarks(), NPL::A1::Forms::LoadModule_SHBuild(), NPL::A1::Forms::LoadModule_std_system() , 以及 YSLib::Drawing::to_string().

这是这个函数的调用关系图:

## ◆ raise_exception()

template<typename _type >

void ystdex::raise_exception | ( | _type && | e | ) |

inline

引发异常：若当前存在正在处理的异常则抛出嵌套异常，否则抛出异常。

自从
  build 657

在文件 ystdex/exception.h 第 81 行定义.

引用了 CHRLib::e , 以及 yforward.

## ◆ range_size()

template<typename _tElem >

size_t ystdex::range_size | ( | std::initializer_list< _tElem > | il | ) |

inline

参见
  CWG 1591 。

自从
  build 664

在文件 container.hpp 第 135 行定义.

引用了 ystdex::cpp2017::size().

函数调用图:

## ◆ rbegin() [2/5]

template<typename _type , size_t _vN>

reverse_iterator<_type*> ystdex::rbegin | ( | _type(&&) | array[_vN] | ) |

inline

在文件 range.hpp 第 390 行定义.

被这些函数引用 ystdex::cpp2017::crbegin(), ystdex::cpp2014::crbegin() , 以及 main().

这是这个函数的调用关系图:

## ◆ read_all_with_buffer()

template<typename _func >

static void ystdex::read_all_with_buffer | ( | std::FILE * | fp,
|  | char * | p_buf,
|  | size_t | len,
|  | _func | append
| ) |  |

static

使用指定缓冲区和缓冲区处理函数从流中顺序读取所有内容。

前置条件
  断言：指针参数非空。

注解
  假定文件可读。
  读取前设置关闭源缓冲。

参见
  ystdex::setnbuf

自从
  build 839

在文件 ystdex/cstdio.h 第 96 行定义.

引用了 fp, setnbuf() , 以及 yconstraint.

被这些函数引用 YSLib::FetchCommandOutput().

函数调用图:
这是这个函数的调用关系图:

## ◆ read_uint_be()

template<size_t _vWidth>

make_width_int<_vWidth>::unsigned_type ystdex::read_uint_be | ( | const byte * | buf | ) |

inline

从字节缓冲区读取指定宽的大端序无符号整数。

前置条件
  指针参数非空。

自从
  build 623

在文件 cstdint.hpp 第 515 行定义.

引用了 YSLib::Text::buf , 以及 yconstraint.

## ◆ read_uint_le()

template<size_t _vWidth>

make_width_int<_vWidth>::unsigned_type ystdex::read_uint_le | ( | const byte * | buf | ) |

inline

从字节缓冲区读取指定宽的小端序无符号整数。

自从
  build 608

在文件 cstdint.hpp 第 528 行定义.

引用了 YSLib::Text::buf, ystdex::cpp2014::make_reverse_iterator() , 以及 yconstraint.

函数调用图:

## ◆ ref()

template<class _type >

void ystdex::ref | ( | const _type && |  | ) |

delete

被这些函数引用 YSLib::AccessNode(), YSLib::UI::Styles::AddHandlers(), YSLib::UI::AddWidgets(), YSLib::UI::AddWidgetsZ(), YSLib::GHEvent< _tRet(_tParams...)>::GEqualityExpanded< _fCallable >::AreEqual(), platform_ex::Attach(), ystdex::call_once_init< YSLib::GUIApplication::InitBlock, once_flag >::call_once_init(), NPL::A1::Forms::CallBinary(), NPL::A1::Forms::CallBinaryAs(), NPL::A1::Forms::CallUnary(), NPL::A1::Forms::CallUnaryAs(), NPL::Collapse(), YSLib::UI::MLinearUIContainer::Contains(), CHRLib::ConvertCharacter(), NPL::A1::Forms::DefineLazy(), NPL::A1::Internals::FetchTailEnvironmentReference(), YSLib::UI::FetchTopLevel(), NPL::A1::Forms::ForwardListFirst(), YSLib::UI::Widget::InitializeEvents(), NPL::LiftCollapsed(), NPL::A1::Forms::LoadStandardContext(), YSLib::UI::Panel::MoveToFront(), YSLib::UI::MTextList::MTextList(), YSLib::UI::MLinearUIContainer::operator-=(), NPL::PrintNode(), NPL::Session::ProcessSequence(), NPL::Session::ProcessSequenceOne(), pvoid_ref(), NPL::A1::REPLContext::ReadFrom(), NPL::A1::ReduceChildren(), NPL::A1::Internals::ReduceForCombinerRef(), NPL::A1::Internals::ReduceSubsequent(), NPL::A1::Internals::ReduceSubsequentCombinedBranch(), YReader::TextInfoBox::Refresh(), NPL::A1::RelayForCall(), NPL::A1::RelayToLoadExternal(), YSLib::UI::RemoveWidgets(), NPL::A1::ContextState::RewriteTerm(), NPL::A1::ContextState::RewriteTermGuarded(), NPL::A1::Forms::SetFirst(), NPL::A1::Forms::SetFirstRef(), YSLib::UI::SetRendererOnHover(), YSLib::Drawing::Font::SetStyle(), NPL::A1::SetupDefaultInterpretation(), stable_unique(), NPL::A1::Forms::Unwrap(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tValue >::ator_del::~ator_del(), YReader::ShlTextReader::BaseSession::~BaseSession() , 以及 ystdex::call_once_init< YSLib::GUIApplication::InitBlock, once_flag >::~call_once_init().

这是这个函数的调用关系图:

## ◆ rend() [2/5]

template<typename _type , size_t _vN>

reverse_iterator<_type*> ystdex::rend | ( | _type(&&) | array[_vN] | ) |

inline

在文件 range.hpp 第 397 行定义.

被这些函数引用 ystdex::cpp2017::crend(), ystdex::cpp2014::crend() , 以及 main().

这是这个函数的调用关系图:

## ◆ replace_cast() [1/2]

template<typename _rDst , typename _tSrc , typename = ystdex::enable_if_t< and_<is_reference<_rDst>, is_trivially_replaceable<remove_reference_t<_tSrc>, remove_reference_t<_rDst>>>::value>>

auto ystdex::replace_cast | ( | _tSrc && | v | ) | -> decltype(std::forward<decltype( reinterpret_cast<_rDst>(v) )>( reinterpret_cast<_rDst>(v) ))

inline

在文件 type_pun.hpp 第 212 行定义.

引用了 v , 以及 yforward.

## ◆ replace_cast() [2/2]

template<typename _pDst , typename _tSrc >

enable_if_t<and_<is_object_pointer<_pDst>, is_trivially_replaceable<_tSrc, remove_pointer_t<_pDst> > >::value, _pDst> ystdex::replace_cast | ( | _tSrc * | v | ) |

inline

保证平凡替换存储的显式转换。

注解
  用于替代针对满足 is_trivially_replaceable 要求对象的 `reinterpret_cast` 。

自从
  build 629

在文件 type_pun.hpp 第 204 行定义.

引用了 v.

被这些函数引用 ntctscpy() , 以及 ntctsncpy().

这是这个函数的调用关系图:

## ◆ reraise()

void ystdex::reraise | ( | int | sig | ) |

调用 restore_signal 重置默认信号处理器后调用 `raise` 引发信号。

注解
  异步信号安全。
  仅在确保依赖 POSIX 或其它扩展定义的确定行为时允许在多线程环境下使用。

警告
  ISO C11 指定多线程环境调用 `signal` 行为未定义。

在文件 csignal.cpp 第 34 行定义.

引用了 restore_signal().

函数调用图:

## ◆ reset() [1/2]

template<typename _type >

bool ystdex::reset | ( | std::shared_ptr< _type > & | p | ) |

inline

在文件 memory.hpp 第 624 行定义.

引用了 platform::p.

## ◆ reset() [2/2]

template<typename _type , class _tDeleter >

bool ystdex::reset | ( | std::unique_ptr< _type, _tDeleter > & | p | ) |

inline

自从
  build 759

在文件 memory.hpp 第 613 行定义.

引用了 platform::p.

被这些函数引用 ystdex::details::optional_base< _type, true >::assign(), platform_ex::ClearKeyStates(), ystdex::cpp2017::optional< _tNodeAlloc >::emplace(), ystdex::cpp2017::optional< _tNodeAlloc >::operator=() , 以及 ystdex::task_pool::reset().

这是这个函数的调用关系图:

## ◆ restore_signal()

void ystdex::restore_signal | ( | int | sig | ) |

inline

调用 `signal` 重置默认信号处理器。

自从
  build 623

在文件 csignal.h 第 41 行定义.

被这些函数引用 reraise().

这是这个函数的调用关系图:

## ◆ restrict_length()

template<class _tString >

_tString&& ystdex::restrict_length | ( | _tString && | str,
|  | const typename string_traits< _tString >::size_type | n
| ) |  |

inline

限制长度不超过指定参数。

自从
  build 608

在文件 string.hpp 第 1288 行定义.

引用了 YSLib::IO::_tString , 以及 YSLib::Text::str.

被这些函数引用 platform::FAT::LFN::ConvertToMBCS().

这是这个函数的调用关系图:

## ◆ rethrow_badstate()

template<typename _tChar , class _tTraits >

void ystdex::rethrow_badstate | ( | std::basic_ios< _tChar, _tTraits > & | ios,
|  | std::ios_base::iostate | state = `std::ios_base::badbit`
| ) |  |

设置流状态并重新抛出当前异常。

注解
  一个主要用例为实现标准库要求的格式/非格式输入/输出函数。

参见
  WG21 N4567 27.7.2.2.1[istream.formatted.reqmts] 。
  WG21 N4567 27.7.2.3[istream.unformatted]/1 。
  WG21 N4567 27.7.3.6.1[ostream.formatted.reqmts] 。
  WG21 N4567 27.7.3.7[ostream.unformatted]/1 。
  LWG 91 。

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

引用了 setstate().

被这些函数引用 extract() , 以及 NPL::operator>>().

函数调用图:
这是这个函数的调用关系图:

## ◆ retry_for_vector()

template<class _tVector , typename _func >

_tVector ystdex::retry_for_vector | ( | typename _tVector::size_type | s,
|  | _func | f
| ) |  |

从第一参数指定的起始缓冲区大小循环取向量结果，按需扩大缓冲区。

前置条件
  断言：第一参数不等于 0 。

注解
  可用于支持 `max_size` 和 `resize` 的字符串类型。

参见
  LWG 2466 。

自从
  build 699

在文件 container.hpp 第 752 行定义.

引用了 CHRLib::f(), CHRLib::s, yconstraint , 以及 yimpl.

函数调用图:

## ◆ retry_on_cond()

template<typename _fCond , typename _fCallable , typename... _tParams>

invoke_result_t<_fCallable, _tParams...> ystdex::retry_on_cond | ( | _fCond | cond,
|  | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

循环重复调用：代替直接使用 do-while 语句以避免过多引入作用域外的变量。

模板参数

  _fCond | 判断条件。
  _fCallable | 可调用对象类型。
  _tParams | 参数类型。

注解
  条件接受调用结果或没有参数。

自从
  build 832

参见
  object_result_t

在文件 functional.hpp 第 554 行定义.

引用了 YSLib::_tParams, CHRLib::args, CHRLib::f(), invoke_nonvoid() , 以及 yforward.

被这些函数引用 NPL::CheckedReduceWith(), NPL::ContextNode::DefaultResolve(), NPL::A1::SeparatorTransformer::operator()(), ystdex::details::list_node_base::reverse_nodes() , 以及 platform::FileDescriptor::WriteContent().

函数调用图:
这是这个函数的调用关系图:

## ◆ round_in()

template<typename _type >

_type ystdex::round_in | ( | _type | x,
|  | _type | err
| ) |  |

inline

在文件 rational.hpp 第 80 行定义.

引用了 is_zero(), round_in_nocheck() , 以及 x.

被这些函数引用 YSLib::Drawing::ImagePages::ZoomByRatio().

函数调用图:
这是这个函数的调用关系图:

## ◆ round_in_nocheck()

template<typename _type >

_type ystdex::round_in_nocheck | ( | _type | x,
|  | _type | err
| ) |  |

inline

指定误差内舍入。

前置条件
  参数为有限值。

警告
  不检查参数。

注解
  不检查误差非零。
  使用 ADL round 。

在文件 rational.hpp 第 71 行定义.

引用了 x.

被这些函数引用 round_in().

这是这个函数的调用关系图:

## ◆ rtrim() [1/3]

template<class _tString >

_tString&& ystdex::rtrim | ( | _tString && | str,
|  | const remove_reference_t< _tString > & | t
| ) |  |

inline

自从
  build 659

在文件 string.hpp 第 1462 行定义.

引用了 YSLib::IO::_tString , 以及 YSLib::Text::str.

## ◆ rtrim() [2/3]

template<class _tString >

_tString&& ystdex::rtrim | ( | _tString && | str,
|  | typename string_traits< _tString >::const_pointer | t = `&to_array<typename string_traits<_tString>::value_type>(" \f\n\r\t\v")[0]`
| ) |  |

inline

前置条件
  断言：指针参数非空。

自从
  build 600

在文件 string.hpp 第 1473 行定义.

引用了 YSLib::IO::_tString, YSLib::Text::str , 以及 yconstraint.

## ◆ rtrim() [3/3]

template<class _tString >

_tString&& ystdex::rtrim | ( | _tString && | str,
|  | typename string_traits< _tString >::value_type | c
| ) |  |

inline

删除字符串中指定的连续后缀字符。

在文件 string.hpp 第 1454 行定义.

引用了 YSLib::IO::_tString, CHRLib::c , 以及 YSLib::Text::str.

被这些函数引用 main() , 以及 trim().

这是这个函数的调用关系图:

## ◆ search_map() [1/4]

template<class _tAssocCon , typename _tKey >

std::pair<typename _tAssocCon::iterator, bool> ystdex::search_map | ( | _tAssocCon & | con,
|  | const _tKey & | k
| ) |  |

inline

在文件 container.hpp 第 955 行定义.

引用了 ystdex::cpp2017::as_const(), cast_mutable() , 以及 search_map().

函数调用图:

## ◆ search_map() [2/4]

template<class _tAssocCon , typename _tKey >

std::pair<typename _tAssocCon::iterator, bool> ystdex::search_map | ( | _tAssocCon & | con,
|  | typename _tAssocCon::const_iterator | hint,
|  | const _tKey & | k
| ) |  |

inline

在文件 container.hpp 第 991 行定义.

引用了 ystdex::cpp2017::as_const(), cast_mutable() , 以及 search_map().

函数调用图:

## ◆ search_map() [3/4]

template<class _tAssocCon , typename _tKey >

std::pair<typename _tAssocCon::const_iterator, bool> ystdex::search_map | ( | const _tAssocCon & | con,
|  | const _tKey & | k
| ) |  |

按指定键搜索指定关联容器。

返回
  一个用于表示结果的 std::pair 值，其成员 `first` 为迭代器， `second` 表示是否没有找到。

注解
  使用 ystdex::cend 和 extract_key 。

自从
  build 677

在文件 container.hpp 第 946 行定义.

引用了 ystdex::cpp2017::end() , 以及 YSLib::i.

被这些函数引用 insert_or_assign(), insert_or_assign_hint(), search_map() , 以及 search_map_by().

函数调用图:
这是这个函数的调用关系图:

## ◆ search_map() [4/4]

template<class _tAssocCon , typename _tKey >

std::pair<typename _tAssocCon::const_iterator, bool> ystdex::search_map | ( | const _tAssocCon & | con,
|  | typename _tAssocCon::const_iterator | hint,
|  | const _tKey & | k
| ) |  |

按指定键和提示的迭代器位置搜索指定关联容器。

自从
  build 680

前置条件
  容器非空或提示的迭代器位置指向尾部。

注解
  使用 ystdex::cbegin 。

在文件 container.hpp 第 971 行定义.

引用了 ystdex::cpp2014::cbegin(), ystdex::cpp2014::cend(), search_map() , 以及 yconstraint.

函数调用图:

## ◆ search_map_by() [1/2]

template<typename _func , class _tAssocCon , typename... _tParams>

std::pair<typename _tAssocCon::iterator, bool> ystdex::search_map_by | ( | _func | f,
|  | _tAssocCon & | con,
|  | _tParams &&... | args
| ) |  |

inline

在文件 container.hpp 第 1019 行定义.

引用了 CHRLib::args, ystdex::cpp2017::as_const(), cast_mutable(), CHRLib::f(), search_map_by() , 以及 yforward.

函数调用图:

## ◆ search_map_by() [2/2]

template<typename _func , class _tAssocCon , typename... _tParams>

std::pair<typename _tAssocCon::const_iterator, bool> ystdex::search_map_by | ( | _func | f,
|  | const _tAssocCon & | con,
|  | _tParams &&... | args
| ) |  |

按指定键值搜索指定映射并执行操作。

前置条件
  最后的参数构造新的值。

返回
  插入成员的迭代器。

注解
  行为类似 std::map::operator[] 。

自从
  build 734

在文件 container.hpp 第 1009 行定义.

引用了 CHRLib::args, CHRLib::f(), search_map() , 以及 yforward.

被这些函数引用 ystdex::mapped_set< ValueNode, ystdex::less<>, MappedSetTraits, allocator_type >::emplace_search(), YSLib::UI::GetMappedEvent(), search_map_by(), try_emplace() , 以及 try_emplace_hint().

函数调用图:
这是这个函数的调用关系图:

## ◆ seq_apply() [1/2]

template<typename _func >

void ystdex::seq_apply | ( | _func && |  | ) |

inline

顺序递归调用。

在文件 function.hpp 第 298 行定义.

被这些函数引用 main(), seq_apply() , 以及 seq_insert().

这是这个函数的调用关系图:

## ◆ seq_apply() [2/2]

template<typename _func , typename _type , typename... _tParams>

void ystdex::seq_apply | ( | _func && | f,
|  | _type && | arg,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 595

在文件 function.hpp 第 303 行定义.

引用了 CHRLib::args, CHRLib::f(), seq_apply() , 以及 yforward.

函数调用图:

## ◆ seq_insert()

template<typename _tCon , typename... _tParams>

void ystdex::seq_insert | ( | _tCon & | con,
|  | _tParams &&... | args
| ) |  |

inline

顺序插入值至指定容器。

自从
  build 338

在文件 container.hpp 第 250 行定义.

引用了 CHRLib::args, seq_apply() , 以及 yforward.

函数调用图:

## ◆ setnbuf()

bool ystdex::setnbuf | ( | std::FILE * | stream | ) |

inline

关闭流缓冲。

前置条件
  参数非空。

返回
  是否成功。

自从
  build 863

在文件 ystdex/cstdio.h 第 62 行定义.

引用了 yconstraint.

被这些函数引用 read_all_with_buffer().

这是这个函数的调用关系图:

## ◆ setstate()

template<typename _tChar , class _tTraits >

void ystdex::setstate | ( | std::basic_ios< _tChar, _tTraits > & | ios,
|  | std::ios_base::iostate | state
| ) |  |

设置流状态。

注解
  无异常抛出：和直接调用 std::basic_ios 的 setstate 成员函数不同。
  不复用标准库实现的内部接口。

在文件 ios.hpp 第 44 行定义.

被这些函数引用 rethrow_badstate().

这是这个函数的调用关系图:

## ◆ sfmt()

template<class _tString = string>

_tString ystdex::sfmt | ( | const typename string_traits< _tString >::value_type * | fmt,
|  |  | ...
| ) |  |

以 C 标准输出格式的输出 basic_string 实例的对象。

注解
  Clang++ 对模板声明 attribute 直接提示格式字符串类型错误。

在文件 string.hpp 第 2028 行定义.

引用了 CHRLib::args , 以及 YSLib::Text::str.

被这些函数引用 NPL::A1::CheckSymbol(), NPL::A1::DefaultEvaluateLeaf(), YSLib::Drawing::FontCache::FontCache(), NPL::A1::LoadNode(), YSLib::Drawing::MultiBitmapData::LockPage(), main(), NPL::A1::ReduceCombinedBranch(), NPL::A1::ReduceCombinedReferent(), NPL::ResolveEnvironment(), NPL::Environment::ThrowForInvalidType(), YSLib::ValueNode::ThrowIndexOutOfRange(), NPL::ThrowListTypeErrorForInvalidType(), NPL::A1::ThrowUnsupportedLiteralError(), NPL::A1::ThrowValueCategoryErrorForFirstArgument(), YSLib::ValueNode::ThrowWrongNameFound() , 以及 YSLib::Drawing::Typeface::Typeface().

这是这个函数的调用关系图:

## ◆ sfmt< string >()

template string ystdex::sfmt< string > | ( | const char * | ,
|  |  | ...
| ) |  |

显式实例化：以 C 标准输出格式的输出 string 对象。

参见
  ystdex::sfmt

被这些函数引用 NPL::TermToString().

这是这个函数的调用关系图:

## ◆ share_copy() [1/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_copy | ( | const _tAlloc & | a,
|  | const _tValue & | v
| ) |  |

inline

复制初始化值以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 894 行定义.

引用了 YSLib::a , 以及 v.

## ◆ share_copy() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_copy | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

复制初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 901 行定义.

引用了 YSLib::a.

## ◆ share_copy() [3/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_copy | ( | const _tValue & | v | ) |

inline

复制值创建对应的 std::shared_ptr 实例的对象。

自从
  build 783

在文件 memory.hpp 第 878 行定义.

引用了 v.

被这些函数引用 YSLib::UI::Animate().

这是这个函数的调用关系图:

## ◆ share_copy() [4/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_copy | ( | std::initializer_list< _tValue > | il | ) |

inline

复制初始化列表创建对应的 std::shared_ptr 实例的对象。

自从
  build 851

在文件 memory.hpp 第 887 行定义.

## ◆ share_forward() [1/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_forward | ( | _tValue && | v | ) |

inline

传递值创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 910 行定义.

引用了 v , 以及 yforward.

## ◆ share_forward() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_forward | ( | const _tAlloc & | a,
|  | _tValue && | v
| ) |  |

inline

传递值以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 926 行定义.

引用了 YSLib::a, v , 以及 yforward.

## ◆ share_forward() [3/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_forward | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

传递初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 933 行定义.

引用了 YSLib::a.

## ◆ share_forward() [4/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_forward | ( | std::initializer_list< _tValue > | il | ) |

inline

传递初始化列表创建对应的 std::shared_ptr 实例的对象。

自从
  build 851

在文件 memory.hpp 第 919 行定义.

## ◆ share_guard()

template<typename _func , typename _type = void>

std::shared_ptr<_type> ystdex::share_guard | ( | _func | f,
|  | _type * | p = `{}`
| ) |  |

inline

创建共享作用域守卫。

自从
  build 676

在文件 scope_guard.hpp 第 124 行定义.

## ◆ share_move() [1/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_move | ( | _tValue && | v | ) |

inline

转移值创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 942 行定义.

引用了 v.

被这些函数引用 NPL::A1::OpenUnique() , 以及 NPL::A1::ReduceCombinedBranch().

这是这个函数的调用关系图:

## ◆ share_move() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_move | ( | const _tAlloc & | a,
|  | _tValue && | v
| ) |  |

inline

转移值以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 958 行定义.

引用了 YSLib::a , 以及 v.

## ◆ share_move() [3/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_move | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

转移初始化列表以分配器创建对应的 std::shared_ptr 实例的对象。

在文件 memory.hpp 第 965 行定义.

引用了 YSLib::a.

## ◆ share_move() [4/4]

template<typename _tValue , typename _type = _tValue>

std::shared_ptr<decay_t<_type> > ystdex::share_move | ( | std::initializer_list< _tValue > | il | ) |

inline

转移初始化列表创建对应的 std::shared_ptr 实例的对象。

自从
  build 851

在文件 memory.hpp 第 951 行定义.

## ◆ share_raw() [1/4]

template<typename _type , typename _pSrc , typename... _tParams>

std::shared_ptr<_type> ystdex::share_raw | ( | _pSrc && | p,
|  | _tParams &&... | args
| ) |  |

inline

模板参数

  _pSrc | 指定指针类型。

前置条件
  静态断言：\tt remove_reference_t<_pSrc> 是内建指针。

在文件 memory.hpp 第 702 行定义.

引用了 CHRLib::args, platform::p , 以及 yforward.

## ◆ share_raw() [2/4]

template<typename _type , typename... _tParams>

std::shared_ptr<_type> ystdex::share_raw | ( | _type * | p,
|  | _tParams &&... | args
| ) |  |

inline

自从
  build 627

在文件 memory.hpp 第 692 行定义.

引用了 CHRLib::args, platform::p , 以及 yforward.

## ◆ share_raw() [3/4]

template<typename _type >

std::shared_ptr<_type> ystdex::share_raw | ( | nullptr_t |  | ) |

inline

注解
  使用空指针构造空对象。

自从
  build 319

在文件 memory.hpp 第 716 行定义.

## ◆ share_raw() [4/4]

template<typename _type , class... _tParams>

enable_if_t<sizeof...(_tParams) != 0, std::shared_ptr<_type> > ystdex::share_raw | ( | nullptr_t | ,
|  | _tParams &&... | args
| ) |  |

inline

注解
  使用空指针和其它参数构造空对象。

前置条件
  参数复制构造不抛出异常。

自从
  build 627

在文件 memory.hpp 第 728 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ sizeof_params()

template<typename... _tParams>

size_t ystdex::sizeof_params | ( | _tParams && | ... | ) |

inline

统计函数参数列表中的参数个数。

自从
  build 594

在文件 function.hpp 第 216 行定义.

## ◆ sort_unique() [1/2]

template<class _tCon >

void ystdex::sort_unique | ( | _tCon & | con | ) |

inline

排序指定序列容器，保留不重复元素。

前置条件
  容器的迭代器满足随机迭代器要求。

自从
  build 414

在文件 container.hpp 第 645 行定义.

引用了 ystdex::cpp2017::begin(), ystdex::cpp2017::end() , 以及 sort_unique().

函数调用图:

## ◆ sort_unique() [2/2]

template<typename _tRandom >

_tRandom ystdex::sort_unique | ( | _tRandom | first,
|  | _tRandom | last
| ) |  |

inline

排序指定序列范围，保留不重复元素的区间。

模板参数

  _tRandom | 随机迭代器类型。

参数

  first | 输入范围起始迭代器。
  last | 输入范围终止迭代器。

注解
  时间复杂度：令 N = last - first ， O(N log(N)) + N - 1 次比较。

返回
  不重复元素的区间末尾。

自从
  build 414

在文件 algorithm.hpp 第 583 行定义.

被这些函数引用 alph() , 以及 sort_unique().

这是这个函数的调用关系图:

## ◆ split()

template<typename _fPred , typename _fInsert , typename _tIn >

void ystdex::split | ( | _tIn | b,
|  | _tIn | e,
|  | _fPred | is_delim,
|  | _fInsert | insert
| ) |  |

以指定分隔符分割序列。

注解
  只保留非空结果，不保留分隔符。

自从
  build 304

在文件 algorithm.hpp 第 291 行定义.

引用了 CHRLib::e , 以及 YSLib::i.

被这些函数引用 NPL::A1::SeparatorTransformer::AddRange() , 以及 YReader::ShlReader::LoadBookmarks().

这是这个函数的调用关系图:

## ◆ split_if()

template<typename _fPred , typename _fInsert , typename _func , typename _tIn >

void ystdex::split_if | ( | _tIn | b,
|  | _tIn | e,
|  | _fPred | is_delim,
|  | _fInsert | insert,
|  | _func | pred
| ) |  |

以满足迭代器谓词的指定分隔符分割序列。

自从
  build 668

在文件 algorithm.hpp 第 311 行定义.

引用了 CHRLib::e , 以及 YSLib::i.

## ◆ split_l()

template<typename _fPred , typename _fInsert , typename _tIn >

_tIn ystdex::split_l | ( | _tIn | b,
|  | _tIn | e,
|  | _fPred | is_delim,
|  | _fInsert | insert
| ) |  |

以指定分隔符分割保留起始分隔符的序列。

注解
  除非无法匹配，保留起始分隔符。

自从
  build 408

在文件 algorithm.hpp 第 339 行定义.

引用了 CHRLib::e , 以及 YSLib::i.

被这些函数引用 NPL::Decompose() , 以及 NPL::A1::Forms::LoadModule_SHBuild().

这是这个函数的调用关系图:

## ◆ square()

template<typename _type >

_type ystdex::square | ( | _type | x | ) |

inline

计算平方。

在文件 rational.hpp 第 99 行定义.

引用了 x.

被这些函数引用 quad().

这是这个函数的调用关系图:

## ◆ stable_unique() [1/2]

template<typename _tFwd >

_tFwd ystdex::stable_unique | ( | _tFwd | first,
|  | _tFwd | last
| ) |  |

去除迭代器指定的范围中的重复元素，且不改变元素之间的相对顺序。

参数

  first | 输入范围起始迭代器。
  last | 输入范围终止迭代器。

返回
  输出范围终止迭代器。

注解
  输入和输出范围的起始迭代器相同。
  输出范围元素之间的相对顺序和输入的范围保持一致。
  时间复杂度： O(n^2) ，其中 n 满足 `std::advance(first, n) == last` 。
  使用 ADL 交换。

参见
  WG21 N3936 25.3.9[alg.unique] 。

自从
  build 531

在文件 algorithm.hpp 第 534 行定义.

引用了 YSLib::i , 以及 ystdex_swap::iter_swap().

函数调用图:

## ◆ stable_unique() [2/2]

template<typename _tFwd , typename _fPred >

_tFwd ystdex::stable_unique | ( | _tFwd | first,
|  | _tFwd | last,
|  | _fPred | pred
| ) |  |

参数

  pred | 比较等价的二元谓词。

在文件 algorithm.hpp 第 549 行定义.

引用了 YSLib::i, ystdex_swap::iter_swap() , 以及 ref().

函数调用图:

## ◆ static_pointer_cast() [1/2]

template<typename _tDst , typename _type >

std::unique_ptr<_tDst> ystdex::static_pointer_cast | ( | std::unique_ptr< _type > | p | ) |

inline

智能指针转换。

自从
  build 595

在文件 memory.hpp 第 1077 行定义.

引用了 platform::p.

## ◆ static_pointer_cast() [2/2]

template<typename _tDst , typename _type , typename _tDeleter >

std::unique_ptr<_tDst, _tDeleter> ystdex::static_pointer_cast | ( | std::unique_ptr< _type, _tDeleter > | p | ) |

inline

在文件 memory.hpp 第 1083 行定义.

引用了 platform::p.

## ◆ ston()

template<typename _type , typename _tString , typename... _tParams>

_type ystdex::ston | ( | const _tString & | str,
|  | _tParams &&... | args
| ) |  |

inline

转换表示数的字符串。

自从
  build 542

待办事项:

  支持 std::string 以外类型字符串。

  支持标准库以外的转换。

在文件 string.hpp 第 1976 行定义.

引用了 CHRLib::args, YSLib::Text::str , 以及 yforward.

## ◆ str_find() [1/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find | ( | const _tChar * | p,
|  | _tSize | sz,
|  | _tChar | c,
|  | _tSize | pos
| ) |  |

inline

查找字符或子串。

在文件 cstring.h 第 563 行定义.

引用了 CHRLib::c, platform::p , 以及 yconstraint.

## ◆ str_find() [2/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 574 行定义.

引用了 platform::p, CHRLib::s , 以及 yconstraint.

## ◆ str_find_first_not_of() [1/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_first_not_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | _tChar | c,
|  | _tSize | pos
| ) |  |

inline

在文件 cstring.h 第 660 行定义.

引用了 CHRLib::c, platform::p , 以及 yconstraint.

## ◆ str_find_first_not_of() [2/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_first_not_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 672 行定义.

引用了 platform::p, CHRLib::s , 以及 yconstraint.

## ◆ str_find_first_of()

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_first_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 625 行定义.

引用了 platform::p, CHRLib::s , 以及 yconstraint.

## ◆ str_find_last_not_of() [1/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_last_not_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | _tChar | c,
|  | _tSize | pos
| ) |  |

inline

在文件 cstring.h 第 685 行定义.

引用了 CHRLib::c, platform::p , 以及 yconstraint.

## ◆ str_find_last_not_of() [2/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_last_not_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 702 行定义.

引用了 platform::p, CHRLib::s , 以及 yconstraint.

## ◆ str_find_last_of()

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_find_last_of | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 641 行定义.

引用了 platform::p, CHRLib::s , 以及 yconstraint.

## ◆ str_rfind() [1/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_rfind | ( | const _tChar * | p,
|  | _tSize | sz,
|  | _tChar | c,
|  | _tSize | pos
| ) |  |

inline

在文件 cstring.h 第 591 行定义.

引用了 CHRLib::c, platform::p , 以及 yconstraint.

## ◆ str_rfind() [2/2]

template<typename _tChar , typename _tSize , class _tTraits = std::char_traits<_tChar>, _tSize _vNPos = _tSize(-1)>

_tSize ystdex::str_rfind | ( | const _tChar * | p,
|  | _tSize | sz,
|  | const _tChar * | s,
|  | _tSize | pos,
|  | _tSize | n
| ) |  |

inline

在文件 cstring.h 第 607 行定义.

引用了 ystdex::cpp2014::min(), platform::p, CHRLib::s , 以及 yconstraint.

函数调用图:

## ◆ strcatdup() [1/2]

char* ystdex::strcatdup | ( | const char * | ,
|  | const char * | ,
|  | void * | *)(size_t = `std::malloc`
| ) |  |

带空指针检查的字符串连接复制。

返回
  目标参数。

对传入参数进行非空检查后串接指定的两个字符串， 结果复制至用指定分配函数（默认为 std::malloc）新分配的空间。

## ◆ strcatdup() [2/2]

char* ystdex::strcatdup | ( | const char * | s1,
|  | const char * | s2,
|  | void *(*)(size_t) | fun
| ) |  |

在文件 cstring.cpp 第 49 行定义.

引用了 strcpycat().

函数调用图:

## ◆ strcpy_n()

char* ystdex::strcpy_n | ( | char * | d,
|  | const char * | s
| ) |  |

inline

带空指针检查的字符串复制。

返回
  成功时为复制的字符串，失败时为空指针。

当目标字符串和源字符串都非空时用 std::strcpy 复制字符串。

在文件 cstring.h 第 62 行定义.

引用了 CHRLib::d , 以及 CHRLib::s.

## ◆ strcpycat()

char * ystdex::strcpycat | ( | char * | d,
|  | const char * | s1,
|  | const char * | s2
| ) |  |

带空指针检查的字符串连接。

返回
  返回目标参数。

对传入参数进行非空检查后串接指定的两个字符串，结果复制至指定位置。

在文件 cstring.cpp 第 35 行定义.

引用了 CHRLib::d.

被这些函数引用 strcatdup().

这是这个函数的调用关系图:

## ◆ stream_equal()

template<typename _type , typename _tChar , class _tTraits >

bool ystdex::stream_equal | ( | std::basic_istream< _tChar, _tTraits > & | a,
|  | std::basic_istream< _tChar, _tTraits > & | b
| ) |  |

比较指定流的内容相等。

注解
  不设置流状态，需要注意是否设置忽略空白符。

自从
  build 636

在文件 istream.hpp 第 45 行定义.

引用了 YSLib::a , 以及 ystdex::cpp2014::equal().

函数调用图:

## ◆ streambuf_equal()

template<typename _tChar , class _tTraits >

bool ystdex::streambuf_equal | ( | std::basic_streambuf< _tChar, _tTraits > & | a,
|  | std::basic_streambuf< _tChar, _tTraits > & | b
| ) |  |

比较指定流缓冲区的内容相等。

注解
  流读取失败视为截止。

自从
  build 636

在文件 streambuf.hpp 第 45 行定义.

引用了 YSLib::a , 以及 ystdex::cpp2014::equal().

被这些函数引用 platform::HaveSameContents().

函数调用图:
这是这个函数的调用关系图:

## ◆ strict_all_of()

template<typename _tIn , typename _fPred >

bool ystdex::strict_all_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

严格序列判断操作。

注解
  保证从序列起始判断，返回时序列中的每个值被判断一次。

自从
  build 675

注解
  若返回值，同 std::all_of 的返回结果。

在文件 algorithm.hpp 第 125 行定义.

引用了 platform::bool , 以及 yforward.

## ◆ strict_any_of()

template<typename _tIn , typename _fPred >

bool ystdex::strict_any_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

注解
  若返回值，同 std::any_of 的返回结果。

在文件 algorithm.hpp 第 136 行定义.

引用了 platform::bool , 以及 yforward.

被这些函数引用 strict_none_of().

这是这个函数的调用关系图:

## ◆ strict_none_of()

template<typename _tIn , typename _fPred >

bool ystdex::strict_none_of | ( | _tIn | first,
|  | _tIn | last,
|  | _fPred | pred
| ) |  |

注解
  若返回值，同 std::none_of 的返回结果。

在文件 algorithm.hpp 第 147 行定义.

引用了 strict_any_of().

函数调用图:

## ◆ string_begin() [1/4]

template<typename _tChar >

_tChar* ystdex::string_begin | ( | _tChar * | str | ) |

inline

自从
  build 664

在文件 string.hpp 第 1047 行定义.

引用了 YSLib::Text::str , 以及 yconstraint.

## ◆ string_begin() [2/4]

template<class _tRange >

auto ystdex::string_begin | ( | _tRange & | c | ) | -> decltype(c.begin())

inline

注解
  使用 ADL 访问字符串范围。
  同 ystdex::begin 和 ystdex::end ，但字符数组除外。
  此处 string_end 语义和 boost::end 相同，但对数组类型不同于 std::end 。

Bug:
  decltype 指定的返回类型不能使用 ADL 。

参见
  WG21 N3936 20.4.7[iterator.range] 。

自从
  build 519

在文件 string.hpp 第 1033 行定义.

引用了 ystdex::cpp2017::begin() , 以及 CHRLib::c.

被这些函数引用 begins_with(), ends_with(), main(), YSLib::Drawing::PrintLine(), YSLib::Drawing::PrintString(), YSLib::Drawing::PutLine() , 以及 YSLib::Drawing::PutString().

函数调用图:
这是这个函数的调用关系图:

## ◆ string_begin() [3/4]

template<class _tRange >

auto ystdex::string_begin | ( | const _tRange & | c | ) | -> decltype(c.begin())

inline

在文件 string.hpp 第 1039 行定义.

引用了 ystdex::cpp2017::begin() , 以及 CHRLib::c.

函数调用图:

## ◆ string_begin() [4/4]

template<typename _tElem >

auto ystdex::string_begin | ( | std::initializer_list< _tElem > | il | ) | -> decltype(il.begin())

inline

参见
  CWG 1591 。

在文件 string.hpp 第 1055 行定义.

## ◆ string_empty() [1/3]

template<typename _tChar >

bool ystdex::string_empty | ( | const _tChar * | str | ) |

inline

判断字符串是否为空。

自从
  build 835

前置条件
  指针指定的字符串为 NTCTS 。

在文件 string.hpp 第 1110 行定义.

引用了 is_null() , 以及 YSLib::Text::str.

被这些函数引用 ystdex::path_traits< void >::has_root_name(), YSLib::IO::PathTraits::has_root_name(), ystdex::path_traits< void >::has_root_path(), ystdex::path_traits< void >::is_absolute() , 以及 YSLib::IO::PathTraits::is_absolute().

函数调用图:
这是这个函数的调用关系图:

## ◆ string_empty() [2/3]

template<typename _type >

auto ystdex::string_empty | ( | const _type & | str | ) | -> decltype(size(str))

inline

在文件 string.hpp 第 1116 行定义.

引用了 ystdex::cpp2017::empty() , 以及 YSLib::Text::str.

函数调用图:

## ◆ string_empty() [3/3]

template<typename _tElem >

size_t ystdex::string_empty | ( | std::initializer_list< _tElem > | il | ) |

inline

参见
  CWG 1591 。

在文件 string.hpp 第 1124 行定义.

## ◆ string_end() [1/4]

template<typename _tChar >

_tChar* ystdex::string_end | ( | _tChar * | str | ) |

inline

自从
  build 664

在文件 string.hpp 第 1078 行定义.

引用了 ntctslen() , 以及 YSLib::Text::str.

函数调用图:

## ◆ string_end() [2/4]

template<class _tRange >

auto ystdex::string_end | ( | _tRange & | c | ) | -> decltype(c.end())

inline

在文件 string.hpp 第 1064 行定义.

引用了 CHRLib::c , 以及 ystdex::cpp2017::end().

被这些函数引用 begins_with(), ends_with(), main(), YSLib::Drawing::PrintLine(), YSLib::Drawing::PrintString(), YSLib::Drawing::PutLine() , 以及 YSLib::Drawing::PutString().

函数调用图:
这是这个函数的调用关系图:

## ◆ string_end() [3/4]

template<class _tRange >

auto ystdex::string_end | ( | const _tRange & | c | ) | -> decltype(c.end())

inline

在文件 string.hpp 第 1070 行定义.

引用了 CHRLib::c , 以及 ystdex::cpp2017::end().

函数调用图:

## ◆ string_end() [4/4]

template<typename _tElem >

auto ystdex::string_end | ( | std::initializer_list< _tElem > | il | ) | -> decltype(il.end())

inline

参见
  CWG 1591 。

在文件 string.hpp 第 1086 行定义.

## ◆ string_length() [1/3]

template<typename _tChar >

size_t ystdex::string_length | ( | const _tChar * | str | ) |

inline

计算字符串长度。

自从
  build 664

前置条件
  指针指定的字符串为 NTCTS 。

自从
  build 835

在文件 string.hpp 第 1142 行定义.

引用了 YSLib::Text::str.

被这些函数引用 begins_with(), filter_prefix(), YSLib::IO::PathTraits::has_root_path(), YSLib::IO::PathTraits::is_absolute(), ystdex::path_traits< void >::is_parent(), ystdex::path_traits< void >::is_self() , 以及 main().

这是这个函数的调用关系图:

## ◆ string_length() [2/3]

template<typename _type >

auto ystdex::string_length | ( | const _type & | str | ) | -> decltype(size(str))

inline

在文件 string.hpp 第 1148 行定义.

引用了 ystdex::cpp2017::size() , 以及 YSLib::Text::str.

函数调用图:

## ◆ string_length() [3/3]

template<typename _tElem >

size_t ystdex::string_length | ( | std::initializer_list< _tElem > | il | ) |

inline

参见
  CWG 1591 。

在文件 string.hpp 第 1156 行定义.

## ◆ strlen_n()

size_t ystdex::strlen_n | ( | const char * | s | ) |

inline

带空指针检查的字符串长度计算。

返回
  当字符指针非空时为 std::strlen 计算的串长，否则为 0 。

在文件 cstring.h 第 50 行定义.

引用了 CHRLib::s.

## ◆ swap() [1/2]

template<typename _type >

void ystdex::swap | ( | observer_ptr< _type > & | p1,
|  | observer_ptr< _type > & | p2
| ) |  |

inline

在文件 pointer.hpp 第 399 行定义.

引用了 YSLib::Drawing::p1 , 以及 YSLib::Drawing::p2.

被这些函数引用 ystdex::observer_ptr< _type >::swap().

这是这个函数的调用关系图:

## ◆ swap_dependent()

template<typename _type >

void ystdex::swap_dependent | ( | _type & | x,
|  | _type & | y
| ) |  |

inline

支持基于 ystdex_swap::swap 的 ADL 的左值交换。

自从
  build 831

参见
  boost::swap
  std::iter_swap
  ystdex_swap::swap
  LWG 809 。
  WG21 P0934R0 。

支持在表达式上下文（如 noexcept 异常规范）中使用的带有 ADL swap 查找的交换操作， 无需使用另行声明引入非 ADL 查找的名称。 在 swap 成员函数可见的作用域中无法直接使用 using 引入带有命名空间限定的 swap 。 在使用数据成员或基类的交换操作实现交换操作时，前者若为非成员 swap ，可被此影响而无法 直接使用。为解决这个问题，需要使用和 swap 不同名称的专用函数模板。 注意，除非存在对参数更特定的 swap 函数，以 ystdex_swap::swap 为名称的模板和 swap 在 ADL 启用时可被同时查找到，重载时引起歧义。 若以 ystdex 中的类型作为模板参数，使用模板参数的依赖名称查找，只要包含头文件， 实例化时应总是按以下顺序查找： 友元 swap 或特化版本的 ystdex::swap 重载； ystdex_swap::swap 。 非类类型不使用 ADL ，以减少 std 或其它命名空间中的 swap 调用的歧义。 由于 is_nothrow_swappable 的实现（不论在哪个命名空间）可能引入 std::swap 作为 重载候选之一以及和 ystdex_swap::swap 类似的原因， 本模板不使用 ystdex::swap 作为名称。

在文件 swap.hpp 第 371 行定义.

引用了 ystdex::details::swap_dep_impl::swap_dep(), x, YSLib::UI::y , 以及 yimpl.

被这些函数引用 create_and_swap(), ystdex::details::do_alloc_on_swap(), ystdex::indirect_input_iterator< _tIter >::indirect_input_iterator(), NPL::A1::Forms::LoadModule_std_system(), ystdex::one_shot< _func, _tRes, _tState >::one_shot(), ystdex::one_shot< _func, void, _tState >::one_shot(), ystdex::one_shot< _func, _tRes, _tState >::operator=(), ystdex::one_shot< _func, void, _tState >::operator=(), ystdex::nptr< link_type >::swap(), ystdex::details::node_handle< _tKey, _type, _tNodeAlloc >::swap(), ystdex::cpp2017::optional< _tNodeAlloc >::swap(), ystdex::map< VisualEvent, EventItem >::swap(), ystdex::list< chunk_pr_t, polymorphic_allocator< chunk_pr_t > >::swap(), ystdex::details::node_handle_base< _type, _tNodeAlloc >::swap_base(), YSLib::UI::TextPlaceholder::SwapLabel(), YSLib::UI::TextPlaceholder::SwapText(), YSLib::UI::TextPlaceholder::SwapTextBox() , 以及 vswap().

函数调用图:
这是这个函数的调用关系图:

## ◆ swap_underlying()

template<typename _type >

void ystdex::swap_underlying | ( | _type & | x,
|  | _type & | y
| ) |  |

交换相同标准布局类型可修改左值的存储。

自从
  build 620

在文件 swap.hpp 第 443 行定义.

引用了 ystdex_swap::swap(), x , 以及 YSLib::UI::y.

函数调用图:

## ◆ swap_volatile() [1/3]

template<typename _type >

enable_if_t<is_nothrow_constructible<_type, volatile _type>) && is_nothrow_assignable<_type&, volatile _type&&>) && is_nothrow_assignable<volatile _type&, _type&&>)> ystdex::swap_volatile | ( | _type & | x,
|  | volatile _type & | y
| ) |  |

交换非 volatile 左值和 volatile 左值。

前置条件
  可赋值。

自从
  build 704

在文件 swap.hpp 第 388 行定义.

引用了 x , 以及 YSLib::UI::y.

被这些函数引用 swap_volatile().

这是这个函数的调用关系图:

## ◆ swap_volatile() [2/3]

template<typename _type , size_t _vN>

void ystdex::swap_volatile | ( | _type(&) | x[_vN],
|  | add_volatile_t< _type[_vN]> & | y
| ) |  |

在文件 swap.hpp 第 407 行定义.

引用了 addressof(), swap_volatile(), x, YSLib::UI::y , 以及 yunseq.

被这些函数引用 vswap().

函数调用图:
这是这个函数的调用关系图:

## ◆ swap_volatile() [3/3]

template<typename _type >

auto ystdex::swap_volatile | ( | volatile _type & | x,
|  | _type & | y
| ) |  | -> decltype(ystdex::swap_volatile(y, x))

inline

在文件 swap.hpp 第 399 行定义.

引用了 swap_volatile(), x , 以及 YSLib::UI::y.

函数调用图:

## ◆ throw_allocator_mismatch_error()

void ystdex::throw_allocator_mismatch_error | ( |  | ) |

related

在文件 ystdex/exception.cpp 第 62 行定义.

被这些函数引用 ystdex::any::do_alloc_init_impl().

这是这个函数的调用关系图:

## ◆ throw_error() [1/4]

template<class _type = std::system_error, typename... _tParams>

void ystdex::throw_error | ( | int | ev,
|  | _tParams &&... | args
| ) |  |

inline

在文件 ystdex/exception.h 第 253 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ throw_error() [2/4]

template<class _type = std::system_error, typename... _tParams>

void ystdex::throw_error | ( | int | ev,
|  | const std::error_category & | ecat,
|  | _tParams &&... | args
| ) |  |

inline

在文件 ystdex/exception.h 第 259 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ throw_error() [3/4]

template<class _type = std::system_error, typename... _tParams>

void ystdex::throw_error | ( | std::error_code | ec,
|  | _tParams &&... | args
| ) |  |

inline

抛出错误： std::system_error 或允许相同构造函数参数的异常。

异常

  _type | 使用参数构造的异常。

自从
  build 637

在文件 ystdex/exception.h 第 241 行定义.

引用了 CHRLib::args , 以及 yforward.

被这些函数引用 ystdex::threading::lock_base< _tMutex, true >::check_lock(), platform::FAT::CheckColons(), platform::CreateHardLink(), platform::CreateSymbolicLink(), YSLib::FetchCommandOutput(), platform::FetchCurrentWorkingDirectory(), platform::FileDescriptor::GetFlags(), platform::HaveSameContents(), platform::MappedFile::MappedFile(), YSLib::IO::OpenFile(), platform::HDirectory::operator++(), platform::ReadLink(), platform::FileDescriptor::SetBlocking(), platform::SetEnvironmentVariable(), platform::FileDescriptor::SetFlags(), platform::FileDescriptor::SetMode(), platform::FileDescriptor::SetNonblocking(), ystdex::threading::lock_base< _tMutex, true >::unlock() , 以及 YSLib::IO::YB_NONNULL().

这是这个函数的调用关系图:

## ◆ throw_error() [4/4]

template<class _type = std::system_error, typename... _tParams>

void ystdex::throw_error | ( | std::error_condition | cond,
|  | _tParams &&... | args
| ) |  |

inline

在文件 ystdex/exception.h 第 247 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ throw_invalid_construction()

void ystdex::throw_invalid_construction | ( |  | ) |

related

在文件 ystdex/exception.cpp 第 49 行定义.

被这些函数引用 YSLib::PointerHolder< _type, _tTraits >::Create(), ystdex::details::create_or_throw_impl(), ystdex::details::create_or_throw_with_allocator_impl(), YSLib::HolderOperations< _tHolder >::CreateInPlaceConditionally(), YSLib::HolderOperations< _tHolder >::CreateInPlaceImpl(), YSLib::HolderOperations< _tHolder >::CreateInPlaceWithAllocatorImpl(), ystdex::any_ops::value_handler< _tHolder >::init_or_throw(), ystdex::any_ops::allocator_value_handler< _tByteAlloc, _tHolder >::init_or_throw(), NPL::LiftToReference() , 以及 ystdex::details::new_or_throw_impl().

这是这个函数的调用关系图:

## ◆ to_address()

template<typename _type >

_type* ystdex::to_address | ( | _type * | p | ) |

inline

在文件 pointer.hpp 第 103 行定义.

引用了 platform::p.

被这些函数引用 ystdex::details::to_address().

这是这个函数的调用关系图:

## ◆ to_array() [1/5]

template<typename _type , size_t _vN, typename _tSrcElement >

std::array<_type, _vN> ystdex::to_array | ( | _tSrcElement(&&) | src[_vN] | ) |

inline

在文件 array.hpp 第 113 行定义.

引用了 addressof() , 以及 YSLib::Drawing::src.

函数调用图:

## ◆ to_array() [2/5]

template<typename _type , size_t _vN, typename _tSrc >

std::array<_type, _vN> ystdex::to_array | ( | const _tSrc & | src | ) |

inline

转换指定参数为 `std::array` 对象。

自从
  build 337

在文件 array.hpp 第 92 行定义.

引用了 YSLib::Drawing::src.

## ◆ to_array() [3/5]

template<typename _type , size_t _vN, typename _tSrcElement >

std::array<_type, _vN> ystdex::to_array | ( | const _tSrcElement(&) | src[_vN] | ) |

inline

在文件 array.hpp 第 104 行定义.

引用了 addressof() , 以及 YSLib::Drawing::src.

函数调用图:

## ◆ to_array() [4/5]

template<typename _type , size_t _vN>

std::array<_type, _vN> ystdex::to_array | ( | const std::array< _type, _vN > & | src | ) |

inline

在文件 array.hpp 第 98 行定义.

引用了 YSLib::Drawing::src.

## ◆ to_array() [5/5]

template<typename _type , size_t _vN, typename _tSrcElement >

std::array<_type, _vN> ystdex::to_array | ( | std::initializer_list< _tSrcElement > | il | ) |

inline

自从
  build 636

在文件 array.hpp 第 124 行定义.

引用了 addressof() , 以及 ystdex::cpp2014::min().

函数调用图:

## ◆ to_string() [1/5]

template<typename _type >

enable_if_t<is_arithmetic<_type>::value, string> ystdex::to_string | ( | _type | val | ) |

inline

转换为字符串：basic_string 的实例对象。

注解
  可与标准库的同名函数共用以避免某些类型转换警告，如 G++ 的 [-Wsign-promo] 。

自从
  build 833

在文件 string.hpp 第 1851 行定义.

引用了 ystdex::details::arithmetic_to_string().

函数调用图:

## ◆ to_string() [2/5]

template<typename _type >

enable_if_t<is_enum<_type>::value, string> ystdex::to_string | ( | _type | val | ) |

inline

在文件 string.hpp 第 1857 行定义.

引用了 to_string() , 以及 underlying().

函数调用图:

## ◆ to_string() [3/5]

template<typename _type , class _tStream = std::ostringstream, class _tString = basic_string<typename _tStream::char_type, typename _tStream::traits_type, typename _tStream::allocator_type>>

enable_if_t<is_class<_type>::value, _t<details::stream_str_det<_tStream, _tString> > > ystdex::to_string | ( | const _type & | x | ) |

自从
  build 887

在文件 string.hpp 第 1869 行定义.

引用了 x.

被这些函数引用 ystdex::details::arithmetic_to_string().

这是这个函数的调用关系图:

## ◆ to_string() [4/5]

template<class _tSeqCon , class _tTraits >

_tSeqCon::value_type ystdex::to_string | ( | const path< _tSeqCon, _tTraits > & | pth,
|  | const typename _tSeqCon::value_type & | seperator = `&to_array< typename string_traits<typename _tSeqCon::value_type>::value_type>("/")[0]`
| ) |  |

取字符串表示。

在文件 path.hpp 第 671 行定义.

引用了 YSLib::i.

## ◆ to_string() [5/5]

std::string ystdex::to_string | ( | const std::thread::id & |  | ) |

转换 `thread::id` 为字符串表示。

注解
  使用 `operator<<` 实现。

自从
  build 543

被这些函数引用 NPL::DecodeNodeIndex(), YReader::FetchEncodingString(), get_this_thread_id(), YSLib::IO::ImplExpr(), YSLib::UI::ParseRect(), YSLib::StringifyToNode(), to_string(), YReader::TextInfoBox::UpdateData(), YSLib::UI::BorderResizer::Wrap(), platform::FileDescriptor::WriteContent() , 以及 platform::YB_NONNULL().

这是这个函数的调用关系图:

## ◆ to_string_d()

template<class _tSeqCon , class _tTraits >

_tSeqCon::value_type ystdex::to_string_d | ( | const path< _tSeqCon, _tTraits > & | pth,
|  | typename string_traits< typename _tSeqCon::value_type >::value_type | delimiter = `'/'`
| ) |  |

取以分隔符结束的字符串表示。

在文件 path.hpp 第 705 行定义.

引用了 YSLib::i.

## ◆ to_wstring() [1/3]

template<typename _type >

enable_if_t<is_arithmetic<_type>::value, wstring> ystdex::to_wstring | ( | _type | val | ) |

inline

在文件 string.hpp 第 1880 行定义.

引用了 ystdex::details::arithmetic_to_wstring().

被这些函数引用 to_wstring().

函数调用图:
这是这个函数的调用关系图:

## ◆ to_wstring() [2/3]

template<typename _type >

enable_if_t<is_enum<_type>::value, wstring> ystdex::to_wstring | ( | _type | val | ) |

inline

在文件 string.hpp 第 1886 行定义.

引用了 to_wstring() , 以及 underlying().

函数调用图:

## ◆ to_wstring() [3/3]

template<typename _type , class _tStream = std::wostringstream, class _tString = wstring>

enable_if_t<is_class<_type>::value, _t<details::stream_str_det<_tStream, _tString> > > ystdex::to_wstring | ( | const _type & | x | ) |

在文件 string.hpp 第 1896 行定义.

引用了 x.

被这些函数引用 ystdex::details::arithmetic_to_wstring().

这是这个函数的调用关系图:

## ◆ tolower()

char ystdex::tolower | ( | char | c | ) |

inline

转换大小写字符。

注解
  和 ISO C 标准库对应接口不同而和 ISO C++ <locale> 中的接口类似， 参数和返回值是字符类型而不是对应的整数类型。

在文件 cctype.h 第 153 行定义.

引用了 CHRLib::c.

被这些函数引用 platform::FAT::EntryData::GenerateAlias() , 以及 ntctsicmp().

这是这个函数的调用关系图:

## ◆ toupper()

char ystdex::toupper | ( | char | c | ) |

inline

在文件 cctype.h 第 172 行定义.

引用了 CHRLib::c.

## ◆ towlower()

template<typename _tChar >

_tChar ystdex::towlower | ( | _tChar | c | ) |

inline

自从
  build 823

在文件 cctype.h 第 165 行定义.

引用了 CHRLib::c.

被这些函数引用 ntctsicmp().

这是这个函数的调用关系图:

## ◆ towupper()

template<typename _tChar >

_tChar ystdex::towupper | ( | _tChar | c | ) |

inline

自从
  build 823

在文件 cctype.h 第 184 行定义.

引用了 CHRLib::c.

被这些函数引用 platform::FAT::LFN::ConvertToAlias().

这是这个函数的调用关系图:

## ◆ trail() [1/2]

template<class _tCon , typename _tParam1 , typename _tParam2 , typename... _tParams>

_tCon&& ystdex::trail | ( | _tCon && | con,
|  | _tParam1 && | arg1,
|  | _tParam2 && | arg2,
|  | _tParams &&... | args
| ) |  |

自从
  build 835

在文件 container.hpp 第 669 行定义.

引用了 CHRLib::args , 以及 yforward.

## ◆ trail() [2/2]

template<class _tCon >

_tCon&& ystdex::trail | ( | _tCon && | con,
|  | const typename decay_t< _tCon >::value_type & | value = `{}`
| ) |  |

保证非空容器以参数指定的元素结尾。

自从
  build 567

在文件 container.hpp 第 659 行定义.

## ◆ transform_n()

template<typename _fOp , typename _tOut , typename... _tIns>

void ystdex::transform_n | ( | _fOp | op,
|  | _tOut | result,
|  | size_t | n,
|  | _tIns... | iters
| ) |  |

指定数量的序列变换。

模板参数

  _fOp | 序列变换操作类型。
  _tOut | 表示结果的输出迭代器类型。
  _tIns | 输入迭代器类型。

前置条件
  迭代器可解引用。

警告
  不检查越界。

自从
  build 517

在文件 algorithm.hpp 第 416 行定义.

引用了 YB_VerifyIterator , 以及 yunseq.

被这些函数引用 main().

这是这个函数的调用关系图:

## ◆ transform_when()

template<typename _tIn , typename _tOut , typename _fPred , typename _fOp >

_tOut ystdex::transform_when | ( | _tIn | first,
|  | _tOut | result,
|  | _fPred | pred,
|  | _fOp | op
| ) |  |

变换满足谓词的序列的连续元素。

模板参数

  _tIn | 输入迭代器类型。
  _tOut | 输出迭代器类型。
  _fPred | 谓词类型。

参数

  first | 被复制序列的起始输入迭代器。
  result | 输出迭代器。
  pred | 一元谓词。

前置条件
  迭代器可解引用。

自从
  build 594

模板参数

  _fOp | 变换操作类型。

参数

  op | 一元变换操作。

在文件 algorithm.hpp 第 384 行定义.

引用了 YB_VerifyIterator , 以及 yunseq.

被这些函数引用 copy_when() , 以及 CHRLib::UCS4ToUCS2().

这是这个函数的调用关系图:

## ◆ trim() [1/3]

template<class _tString >

_tString&& ystdex::trim | ( | _tString && | str,
|  | const _tString & | t
| ) |  |

inline

自从
  build 659

在文件 string.hpp 第 1493 行定义.

引用了 ltrim(), rtrim(), YSLib::Text::str , 以及 yforward.

函数调用图:

## ◆ trim() [2/3]

template<class _tString >

_tString&& ystdex::trim | ( | _tString && | str,
|  | typename string_traits< _tString >::const_pointer | t = `&to_array<typename string_traits<_tString>::value_type>(" \f\n\r\t\v")[0]`
| ) |  |

inline

前置条件
  断言：指针参数非空。

自从
  build 600

在文件 string.hpp 第 1504 行定义.

引用了 ltrim(), rtrim(), YSLib::Text::str, yconstraint , 以及 yforward.

函数调用图:

## ◆ trim() [3/3]

template<class _tString >

_tString&& ystdex::trim | ( | _tString && | str,
|  | typename string_traits< _tString >::value_type | c
| ) |  |

inline

删除字符串中指定的连续前缀与后缀字符。

在文件 string.hpp 第 1485 行定义.

引用了 CHRLib::c, ltrim(), rtrim(), YSLib::Text::str , 以及 yforward.

被这些函数引用 NPL::Decompose(), NPL::A1::Forms::LoadModule_std_system() , 以及 main().

函数调用图:
这是这个函数的调用关系图:

## ◆ trivially_copy()

template<typename _type >

_type* ystdex::trivially_copy | ( | const _type * | first,
|  | const _type * | last,
|  | _type * | result
| ) |  |

inline

在文件 algorithm.hpp 第 483 行定义.

引用了 trivially_copy_n().

函数调用图:

## ◆ trivially_copy_n()

template<typename _type >

_type* ystdex::trivially_copy_n | ( | const _type * | first,
|  | size_t | n,
|  | _type * | result
| ) |  |

inline

复制不覆盖的序列。

前置条件
  静态断言： `is_copy_assignment<_type>()` 。
  指针输入范围要求同 std::memcpy 。

在文件 algorithm.hpp 第 469 行定义.

引用了 YB_VerifyIterator , 以及 yunseq.

被这些函数引用 ystdex::block_buffer::read(), trivially_copy() , 以及 ystdex::block_buffer::write().

这是这个函数的调用关系图:

## ◆ trivially_fill()

template<typename _type >

void ystdex::trivially_fill | ( | _type * | first,
|  | _type * | last,
|  | byte | value = `{}`
| ) |  |

inline

在文件 algorithm.hpp 第 455 行定义.

## ◆ trivially_fill_n()

template<typename _type >

_type* ystdex::trivially_fill_n | ( | _type * | first,
|  | size_t | n = `1`,
|  | byte | value = `{}`
| ) |  |

inline

填充字节序列。

前置条件
  指针输入范围要求同 std::memset 。

在文件 algorithm.hpp 第 444 行定义.

被这些函数引用 ystdex::block_buffer::fill().

这是这个函数的调用关系图:

## ◆ trivially_move()

template<class _type >

_type* ystdex::trivially_move | ( | const _type * | first,
|  | const _type * | last,
|  | _type * | result
| ) |  |

inline

在文件 algorithm.hpp 第 511 行定义.

引用了 trivially_move_n().

函数调用图:

## ◆ trivially_move_n()

template<class _type >

_type* ystdex::trivially_move_n | ( | const _type * | first,
|  | size_t | n,
|  | _type * | result
| ) |  |

inline

复制可能覆盖的序列。

前置条件
  静态断言： `is_copy_assignment<_type>()` 。
  指针输入范围要求同 std::memmove 。

在文件 algorithm.hpp 第 497 行定义.

引用了 YB_VerifyIterator , 以及 yunseq.

被这些函数引用 YSLib::Drawing::TextRegion::Scroll() , 以及 trivially_move().

这是这个函数的调用关系图:

## ◆ try_emplace()

template<class _tAssocCon , typename _tKey , typename... _tParams>

std::pair<typename _tAssocCon::iterator, bool> ystdex::try_emplace | ( | _tAssocCon & | con,
|  | _tKey && | k,
|  | _tParams &&... | args
| ) |  |

注解
  使用 ADL emplace_hint_in_place 。

参见
  emplace_hint_in_place

注解
  和 WG21 N4279 不同，支持透明比较器和非特定的键类型。

参见
  WG21 N4279 。

自从
  build 680

在文件 container.hpp 第 1039 行定义.

引用了 CHRLib::args, emplace_hint_in_place(), YSLib::i, search_map_by() , 以及 yforward.

被这些函数引用 NPL::Environment::DefDeMoveAssignment(), NPL::Environment::PDefHOp(), YSLib::ValueNode::PlaceValue(), NPL::A1::SetupTraceDepth(), ystdex::map< VisualEvent, EventItem >::try_emplace() , 以及 YSLib::ValueNode::try_emplace().

函数调用图:
这是这个函数的调用关系图:

## ◆ try_emplace_hint()

template<class _tAssocCon , typename _tKey , typename... _tParams>

std::pair<typename _tAssocCon::iterator, bool> ystdex::try_emplace_hint | ( | _tAssocCon & | con,
|  | typename _tAssocCon::const_iterator | hint,
|  | _tKey && | k,
|  | _tParams &&... | args
| ) |  |

在文件 container.hpp 第 1050 行定义.

引用了 CHRLib::args, emplace_hint_in_place(), YSLib::i, search_map_by() , 以及 yforward.

被这些函数引用 NPL::Environment::AddValue() , 以及 YSLib::ValueNode::try_emplace_hint().

函数调用图:
这是这个函数的调用关系图:

## ◆ tuple_not_found()

static const auto ystdex::tuple_not_found | ( | size_t(-1) |  | ) |

static

表示没有找到的索引。

参见
  WG21 P0088R0 。
  WG21 P0088R1 。

自从
  build 651

待办事项:
  重命名为 `variant_npos` ，转移到合适的头文件。

## ◆ type_id()

template<typename _type >

const type_info& ystdex::type_id | ( |  | ) |

参见
  type_info

在文件 typeinfo.h 第 149 行定义.

被这些函数引用 NPL::ContextNode::DefaultResolve() , 以及 NPL::ImplDeDtor().

这是这个函数的调用关系图:

## ◆ unchecked_any_cast() [1/2]

template<typename _type >

_type* ystdex::unchecked_any_cast | ( | any * | p | ) |

inline

未检查的动态泛型转换。

注解
  存储对象类型通过 `ystdex::type_id` 取动态类型并比较结果相等判断。

自从
  build 853

前置条件
  断言：参数非空，指向的对象具有值，且存储的对象类型和模板参数指定的一致。

返回
  储存的对象指针。

注解
  对非空对象，除持有者抛出异常外语义同非公开接口 `boost::unsafe_any_cast` 。

在文件 any.h 第 2324 行定义.

引用了 platform::p, YAssert , 以及 yconstraint.

被这些函数引用 ystdex::any_input_iterator< _type, ptrdiff_t, _type *, _type & >::operator*().

这是这个函数的调用关系图:

## ◆ unchecked_any_cast() [2/2]

template<typename _type >

const _type* ystdex::unchecked_any_cast | ( | const any * | p | ) |

inline

在文件 any.h 第 2336 行定义.

引用了 platform::p, YAssert , 以及 yconstraint.

## ◆ underlying() [1/2]

template<typename _type >

enable_if_t<is_enum_union<_type>::value, wrapped_enum_traits_t<_type> > ystdex::underlying | ( | _type | val | ) |

inline

在文件 enum.hpp 第 112 行定义.

被这些函数引用 to_string() , 以及 to_wstring().

这是这个函数的调用关系图:

## ◆ underlying() [2/2]

template<typename _type , typename = enable_if_t<is_enum<_type>::value>>

underlying_type_t<_type> ystdex::underlying | ( | _type | val | ) |

inline

取枚举值的底层整数。

自从
  build 629

在文件 utility.hpp 第 126 行定义.

## ◆ uninitialized_construct()

template<typename _tFwd , typename... _tParams>

void ystdex::uninitialized_construct | ( | _tFwd | first,
|  | _tFwd | last,
|  | _tParams &&... | args
| ) |  |

在迭代器指定的未初始化的范围上构造对象。

模板参数

  _tFwd | 输出范围前向迭代器类型。
  _tParams | 用于构造对象的参数包类型。

参数

  first | 输出范围起始迭代器。
  args | 用于构造对象的参数包。

注解
  参数被传递的次数和构造的对象数相同。
  接口不保证失败时的析构顺序。

参数

  last | 输出范围终止迭代器。

注解
  和 std::unitialized_fill 类似，但允许指定多个初始化参数。

参见
  WG21 N4431 20.7.12.3[uninitialized.fill] 。

在文件 placement.hpp 第 674 行定义.

引用了 CHRLib::args, construct(), YSLib::i, YB_Impl_UninitGuard_Begin, YB_Impl_UninitGuard_End , 以及 yforward.

函数调用图:

## ◆ uninitialized_construct_n()

template<typename _tFwd , typename _tSize , typename... _tParams>

void ystdex::uninitialized_construct_n | ( | _tFwd | first,
|  | _tSize | n,
|  | _tParams &&... | args
| ) |  |

模板参数

  _tSize | 范围大小类型。

参数

  n | 范围大小。

注解
  和 std::unitialized_fill_n 类似，但允许指定多个初始化参数。

参见
  WG21 N4431 20.7.12.4[uninitialized.fill.n] 。

在文件 placement.hpp 第 690 行定义.

引用了 CHRLib::args, construct(), YSLib::i, YB_Impl_UninitGuard_Begin, YB_Impl_UninitGuard_End , 以及 yforward.

函数调用图:

## ◆ uninitialized_construct_using_allocator()

template<typename _type , class _tAlloc , typename... _tParams>

_type* ystdex::uninitialized_construct_using_allocator | ( | _type * | p,
|  | const _tAlloc & | a,
|  | _tParams &&... | args
| ) |  |

在文件 allocator.hpp 第 351 行定义.

引用了 YSLib::a, ystdex::cpp2017::apply(), CHRLib::args, platform::p , 以及 yforward.

被这些函数引用 ystdex::pmr::polymorphic_allocator< _type >::construct().

函数调用图:
这是这个函数的调用关系图:

## ◆ unique_copy() [1/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_copy | ( | const _tAlloc & | a,
|  | const _tValue & | v
| ) |  |

inline

在文件 memory.hpp 第 992 行定义.

引用了 YSLib::a , 以及 v.

## ◆ unique_copy() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_copy | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

在文件 memory.hpp 第 998 行定义.

引用了 YSLib::a.

## ◆ unique_copy() [3/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_copy | ( | const _tValue & | v | ) |

inline

复制值创建对应的 std::unique_ptr 实例的对象。

自从
  build 841

在文件 memory.hpp 第 978 行定义.

引用了 v.

## ◆ unique_copy() [4/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_copy | ( | std::initializer_list< _tValue > | il | ) |

inline

自从
  build 851

在文件 memory.hpp 第 986 行定义.

## ◆ unique_forward() [1/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_forward | ( | _tValue && | v | ) |

inline

传递值创建对应的 std::unique_ptr 实例的对象。

自从
  build 841

在文件 memory.hpp 第 1010 行定义.

引用了 v , 以及 yforward.

## ◆ unique_forward() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_forward | ( | const _tAlloc & | a,
|  | _tValue && | v
| ) |  |

inline

在文件 memory.hpp 第 1024 行定义.

引用了 YSLib::a, v , 以及 yforward.

## ◆ unique_forward() [3/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_forward | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

在文件 memory.hpp 第 1030 行定义.

引用了 YSLib::a.

## ◆ unique_forward() [4/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_forward | ( | std::initializer_list< _tValue > | il | ) |

inline

自从
  build 851

在文件 memory.hpp 第 1018 行定义.

## ◆ unique_guard()

template<typename _tState = bool, bool _bNoThrow = true, typename _func >

guard<one_shot<decay_t<_func>, void, decay_t<_tState> >, _bNoThrow> ystdex::unique_guard | ( | _func && | f,
|  | _tState && | s = `true`
| ) |  |

自从
  build 820

在文件 scope_guard.hpp 第 95 行定义.

引用了 CHRLib::f(), CHRLib::s , 以及 yforward.

被这些函数引用 YSLib::Application::AddExitGuard() , 以及 ystdex::pmr::oversized_map::allocate().

函数调用图:
这是这个函数的调用关系图:

## ◆ unique_move() [1/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_move | ( | _tValue && | v | ) |

inline

转移值创建对应的 std::unique_ptr 实例的对象。

自从
  build 841

在文件 memory.hpp 第 1042 行定义.

引用了 v.

## ◆ unique_move() [2/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_move | ( | const _tAlloc & | a,
|  | _tValue && | v
| ) |  |

inline

在文件 memory.hpp 第 1056 行定义.

引用了 YSLib::a , 以及 v.

## ◆ unique_move() [3/4]

template<typename _tValue , class _tAlloc , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_move | ( | const _tAlloc & | a,
|  | std::initializer_list< _tValue > | il
| ) |  |

inline

在文件 memory.hpp 第 1062 行定义.

引用了 YSLib::a.

## ◆ unique_move() [4/4]

template<typename _tValue , typename _type = _tValue>

std::unique_ptr<decay_t<_type> > ystdex::unique_move | ( | std::initializer_list< _tValue > | il | ) |

inline

自从
  build 851

在文件 memory.hpp 第 1050 行定义.

## ◆ unique_raw() [1/5]

template<typename _type , typename _pSrc >

std::unique_ptr<_type> ystdex::unique_raw | ( | _pSrc * | p | ) |

inline

在文件 memory.hpp 第 645 行定义.

引用了 platform::p.

被这些函数引用 YSLib::FetchCommandOutput().

这是这个函数的调用关系图:

## ◆ unique_raw() [2/5]

template<typename _type , typename _tDeleter , typename _pSrc >

std::unique_ptr<_type, _tDeleter> ystdex::unique_raw | ( | _pSrc * | p,
|  | _tDeleter && | d
| ) |  |

inline

在文件 memory.hpp 第 657 行定义.

引用了 CHRLib::d, platform::p , 以及 yforward.

## ◆ unique_raw() [3/5]

template<typename _type >

std::unique_ptr<_type> ystdex::unique_raw | ( | _type * | p | ) |

inline

在文件 memory.hpp 第 651 行定义.

引用了 platform::p.

## ◆ unique_raw() [4/5]

template<typename _type , typename _tDeleter >

std::unique_ptr<_type, _tDeleter> ystdex::unique_raw | ( | _type * | p,
|  | _tDeleter && | d
| ) |  |

inline

在文件 memory.hpp 第 663 行定义.

引用了 CHRLib::d, platform::p , 以及 yforward.

## ◆ unique_raw() [5/5]

template<typename _type >

std::unique_ptr<_type> ystdex::unique_raw | ( | nullptr_t |  | ) |

inline

注解
  使用空指针构造空实例。

自从
  build 319

在文件 memory.hpp 第 673 行定义.

## ◆ unique_state_guard()

template<typename _tRes , typename _tState = bool, bool _bNoThrow = true, typename _func >

guard<one_shot<_func, _tRes, decay_t<_tState> >, _bNoThrow> ystdex::unique_state_guard | ( | _func && | f,
|  | _tRes | r = `{}`,
|  | _tState && | s = `true`
| ) |  |

在文件 scope_guard.hpp 第 107 行定义.

## ◆ unpack_uint()

template<size_t _vWidth, typename _tOut >

void ystdex::unpack_uint | ( | typename ystdex::make_width_int< _vWidth >::unsigned_type | value,
|  | _tOut | result
| ) |  |

分解无符号整数到迭代器对指定的字节范围。

前置条件
  断言：范围中的迭代器可解引用。

自从
  build 604

在文件 cstdint.hpp 第 490 行定义.

引用了 YB_VerifyIterator.

## ◆ unref() [1/3]

template<typename _type >

_type& ystdex::unref | ( | _type && | x | ) |

inline

解除引用包装。

注解
  默认仅提供对 std::reference_wrapper 和 lref 的实例类型的重载。

自从
  build 348

在文件 ref.hpp 第 243 行定义.

引用了 x.

被这些函数引用 NPL::Session::GetResult(), NPL::Session::ProcessReserve() , 以及 NPL::Session::ProcessSequenceOne().

这是这个函数的调用关系图:

## ◆ unref() [2/3]

template<typename _type >

_type& ystdex::unref | ( | lref< _type > | x | ) |

inline

自从
  build 890

在文件 ref.hpp 第 257 行定义.

引用了 x.

## ◆ unref() [3/3]

template<typename _type >

_type& ystdex::unref | ( | std::reference_wrapper< _type > | x | ) |

inline

自从
  build 890

在文件 ref.hpp 第 250 行定义.

引用了 x.

## ◆ unsafe_any_cast() [1/2]

template<typename _type >

_type* ystdex::unsafe_any_cast | ( | any * | p | ) |

inline

非安全动态泛型转换。

前置条件
  断言：参数非空，指向的对象不具有值或存储的对象类型和模板参数指定的一致。

返回
  若参数指定的对象具有值，为储存的非空对象指针；否则为空指针。

注解
  除持有者抛出异常外语义同非公开接口 `boost::unsafe_any_cast` 。

在文件 any.h 第 2356 行定义.

引用了 platform::p, YAssert , 以及 yconstraint.

## ◆ unsafe_any_cast() [2/2]

template<typename _type >

const _type* ystdex::unsafe_any_cast | ( | const any * | p | ) |

inline

在文件 any.h 第 2365 行定义.

引用了 platform::p, YAssert , 以及 yconstraint.

## ◆ unseq_apply()

template<typename _func , typename... _tParams>

void ystdex::unseq_apply | ( | _func && | f,
|  | _tParams &&... | args
| ) |  |

inline

无序调用。

在文件 function.hpp 第 314 行定义.

引用了 CHRLib::args, CHRLib::f(), yforward , 以及 yunseq.

被这些函数引用 YSLib::UI::AddWidgets(), YSLib::UI::AddWidgetsZ(), YReader::ShlTextReader::BaseSession::BaseSession(), YSLib::UI::InvalidateWidgets(), YReader::TextInfoBox::Refresh(), YSLib::UI::RemoveWidgets() , 以及 platform::FAT::EntryData::WriteDateTime().

函数调用图:
这是这个函数的调用关系图:

## ◆ unsequenced()

template<typename _type , typename... _tParams>

auto ystdex::unsequenced | ( | _type && | arg,
|  | _tParams && | ...
| ) |  | -> decltype(std::forward<decltype( arg )>( arg ))

inline

无序列依赖表达式组求值实现。

返回
  第一参数的引用。

自从
  build 594

在文件 ydef.h 第 1517 行定义.

引用了 yforward.

## ◆ update_thunk()

template<class _tThunk , typename _func >

void ystdex::update_thunk | ( | _tThunk & | thunk,
|  | _func && | f
| ) |  |

更新间接调用对象。

注解
  可配合跳板实现异步调用。

自从
  build 881

在文件 functional.hpp 第 225 行定义.

引用了 NPL::A1::Internals::cur, CHRLib::f() , 以及 yforward.

函数调用图:

## ◆ upper_bound_n()

template<typename _tFwd , typename _type , typename _fComp = less<_type>>

_tFwd ystdex::upper_bound_n | ( | _tFwd | first,
|  | typename std::iterator_traits< _tFwd >::difference_type | n,
|  | const _type & | value,
|  | _fComp | comp = `less<_type>()`
| ) |  |

取有序范围内的迭代器上界。

注解
  同 std::upper_bound 但使用起始迭代器和距离指定范围。

在文件 algorithm.hpp 第 272 行定义.

引用了 lower_bound_n(), x , 以及 YSLib::UI::y.

函数调用图:

## ◆ uses_allocator_construction_args()

template<typename _type , class _tAlloc , typename... _tParams>

auto ystdex::uses_allocator_construction_args | ( | const _tAlloc & | a,
|  | _tParams &&... | args
| ) |  | -> decltype(details::uses_allocator_args<_type>(details::is_pair<_type>(), details::pair_has_allocator<_type, _tAlloc>(), is_constructible<_type, std::allocator_arg_t, _tAlloc, _tParams...>(), a, std::forward<_tParams&&>(args)...))

inline

在文件 allocator.hpp 第 200 行定义.

引用了 YSLib::_tParams, YSLib::a, CHRLib::args , 以及 yforward.

## ◆ value_or() [1/3]

template<typename _type >

auto ystdex::value_or | ( | _type && | p | ) | -> decay_t<decltype(*std::forward<decltype( p )>( p ))>

inline

取非空值或默认值。

在文件 deref_op.hpp 第 128 行定义.

引用了 platform::p , 以及 yforward.

被这些函数引用 NPL::ParseNPLANodeString() , 以及 NPL::ParseNPLATermString().

这是这个函数的调用关系图:

## ◆ value_or() [2/3]

template<typename _tOther , typename _type >

auto ystdex::value_or | ( | _type && | p,
|  | _tOther && | other
| ) |  | -> decltype(p ? *std::forward<decltype( p )>( p ) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 134 行定义.

引用了 CHRLib::CharSet::other, platform::p , 以及 yforward.

## ◆ value_or() [3/3]

template<typename _tOther , typename _type , typename _tSentinal = nullptr_t>

auto ystdex::value_or | ( | _type && | p,
|  | _tOther && | other,
|  | _tSentinal && | last
| ) |  | -> decltype(!bool(p == std::forward<decltype( last )>( last )) ? *std::forward<decltype( p )>( p ) : std::forward<decltype( other )>( other ))

inline

在文件 deref_op.hpp 第 141 行定义.

引用了 platform::bool, CHRLib::CharSet::other, platform::p , 以及 yforward.

## ◆ varg()

template<size_t _vN, typename... _tParams>

auto ystdex::varg | ( | _tParams &&... | args | ) | -> decltype(variadic_param<_vN>::get(std::forward<decltype( args )>( args )...))

inline

取指定位置的变长参数。

模板参数

  _vN | 表示参数位置的非负数，从左开始计数，第一参数为 0 。

在文件 function.hpp 第 262 行定义.

引用了 CHRLib::args, ystdex::variadic_param< _vN >::get() , 以及 yforward.

函数调用图:

## ◆ vector_concat() [1/2]

template<class _tVector , typename _tIn >

void ystdex::vector_concat | ( | _tVector & | vec,
|  | _tIn | first,
|  | _tIn | last
| ) |  |

插入元素到 `vector` 末尾。

注解
  使用 ADL size 。

自从
  build 546

在文件 container.hpp 第 728 行定义.

引用了 concat(), ystdex::any_ops::distance , 以及 ystdex::cpp2017::size().

函数调用图:

## ◆ vector_concat() [2/2]

template<class _tVector , typename _tRange >

void ystdex::vector_concat | ( | _tVector & | vec,
|  | _tRange && | c
| ) |  |

在文件 container.hpp 第 735 行定义.

引用了 CHRLib::c, concat(), range_size(), ystdex::cpp2017::size() , 以及 yforward.

函数调用图:

## ◆ vfmtlen() [1/2]

size_t ystdex::vfmtlen | ( | const char * | fmt,
|  | std::va_list | args
| ) |  |

计算指定格式字符串输出的占用的字节数。

前置条件
  断言：第一参数非空。

返回
  成功为字节数，否则为 size_t(-1) 。

注解
  分别使用 std::vsnprintf 和 std::vswprintf 实现。

自从
  build 564

在文件 cstdio.cpp 第 39 行定义.

引用了 CHRLib::args, platform::l, platform::size_t , 以及 yconstraint.

被这些函数引用 vsfmt().

这是这个函数的调用关系图:

## ◆ vfmtlen() [2/2]

size_t ystdex::vfmtlen | ( | const wchar_t * | fmt,
|  | std::va_list | args
| ) |  |

在文件 cstdio.cpp 第 48 行定义.

引用了 CHRLib::args, platform::l, platform::size_t , 以及 yconstraint.

## ◆ vsfmt()

template<class _tString = string>

_tString ystdex::vsfmt | ( | const typename string_traits< _tString >::value_type * | fmt,
|  | std::va_list | args
| ) |  |

以 C 标准输出格式的输出字符串类型的对象。

自从
  build 861

前置条件
  间接断言：第一参数非空。

注解
  使用 value_type* 而不是 const_pointer 以避免 Clang++ 对 nonnull 警告。

Bug:
  `char` 以外的模板参数非正确实现。

异常

  std::runtime_error | 格式化字符串输出失败。

注解
  对 _tString 构造异常中立。

在文件 string.hpp 第 1998 行定义.

引用了 YSLib::IO::_tString, CHRLib::args, platform::l, YSLib::Text::str, vfmtlen() , 以及 YAssert.

函数调用图:

## ◆ vswap() [1/2]

template<typename _type , typename _type2 , typename = enable_if_t<!details::swap_volatile_avail<_type, _type2>::value>>

void ystdex::vswap | ( | _type && | x,
|  | _type2 && | y
| ) |  |

交换可能是 volatile 的左值或右值。

前置条件
  参数类型可交换，或具有一个 volatile 类型可用 swap_volatie 交换。

自从
  build 704

注解
  使用 ADL swap 或 ystdex_swap::swap 。

在文件 swap.hpp 第 463 行定义.

引用了 swap_dependent(), x, YSLib::UI::y , 以及 yforward.

被这些函数引用 ystdex::details::state_guard_traits< _type, _tToken, true >::restore() , 以及 ystdex::details::state_guard_traits< _type, _tToken, true >::save().

函数调用图:
这是这个函数的调用关系图:

## ◆ vswap() [2/2]

template<typename _type , typename _type2 >

auto ystdex::vswap | ( | _type && | x,
|  | _type2 && | y
| ) |  | -> enable_if_t <details::swap_volatile_avail<_type, _type2>::value>

inline

注解
  使用 ADL swap_volatile 或 ystdex::swap_volatile 。

在文件 swap.hpp 第 472 行定义.

引用了 swap_volatile(), x, YSLib::UI::y , 以及 yforward.

函数调用图:

## ◆ write() [1/2]

template<typename _tChar , class _tTraits , size_t _vN>

std::basic_ostream<_tChar, _tTraits>& ystdex::write | ( | std::basic_ostream< _tChar, _tTraits > & | os,
|  | const _tChar(&) | s[_vN]
| ) |  |

自从
  build 619

在文件 string.hpp 第 1774 行定义.

引用了 addressof(), CHRLib::s , 以及 ystdex::cpp2017::size().

函数调用图:

## ◆ write() [2/2]

template<typename _tChar , class _tString >

std::basic_ostream<_tChar, typename _tString::traits_type>& ystdex::write | ( | std::basic_ostream< _tChar, typename _tString::traits_type > & | os,
|  | const _tString & | str,
|  | typename _tString::size_type | pos = `0`,
|  | typename _tString::size_type | n = `_tString::npos`
| ) |  |

非格式输出。

自从
  build 599

在文件 string.hpp 第 1761 行定义.

引用了 ystdex::cpp2014::min() , 以及 YSLib::Text::str.

被这些函数引用 NPL::PrintIndent() , 以及 NPL::SXML::PrintSyntaxNode().

函数调用图:
这是这个函数的调用关系图:

## ◆ write_literal()

template<typename _tChar , class _tTraits , size_t _vN>

std::basic_ostream<_tChar, _tTraits>& ystdex::write_literal | ( | std::basic_ostream< _tChar, _tTraits > & | os,
|  | const _tChar(&) | s[_vN]
| ) |  |

注解
  参数数组作为字符串字面量。

自从
  build 619

在文件 string.hpp 第 1785 行定义.

引用了 addressof(), CHRLib::s , 以及 ystdex::cpp2017::size().

函数调用图:

## ◆ write_uint_be()

template<size_t _vWidth>

void ystdex::write_uint_be | ( | byte * | buf,
|  | typename make_width_int< _vWidth >::unsigned_type | val
| ) |  |

inline

向字节缓冲区写入指定宽的大端序无符号整数。

自从
  build 623

在文件 cstdint.hpp 第 542 行定义.

引用了 YSLib::Text::buf , 以及 yconstraint.

## ◆ write_uint_le()

template<size_t _vWidth>

void ystdex::write_uint_le | ( | byte * | buf,
|  | typename make_width_int< _vWidth >::unsigned_type | val
| ) |  |

inline

向字节缓冲区写入指定宽的小端序无符号整数。

在文件 cstdint.hpp 第 552 行定义.

引用了 YSLib::Text::buf, ystdex::cpp2014::make_reverse_iterator() , 以及 yconstraint.

被这些函数引用 platform::FAT::EntryData::WriteCDateTime(), platform::FAT::EntryData::WriteCluster() , 以及 platform::FAT::EntryData::WriteDateTime().

函数调用图:
这是这个函数的调用关系图:

## ◆ xcrease()

template<bool _bIsPositive, typename _tScalar >

_tScalar& ystdex::xcrease | ( | _tScalar & | _x | ) |

inline

选择自增/自减运算。

在文件 functor.hpp 第 541 行定义.

## ◆ yassert()

void ystdex::yassert | ( | const char * | expr_str,
|  | const char * | file,
|  | int | line,
|  | const char * | msg
| ) |  |

YBase 默认断言函数。

注解
  当定义宏 YB_Use_YAssert 不等于 0 时，宏 YAssert 操作由此函数实现。
  参数依次为：表达式、文件名、行号和消息文本。
  允许空指针参数，视为未知。
  调用 std::terminate 终止程序。

自从
  build 642

在文件 cassert.cpp 第 36 行定义.

引用了 CHRLib::s, platform::terminate() , 以及 ynothrow.

函数调用图:

## ◆ ytrace()

void ystdex::ytrace | ( | std::FILE * | ,
|  | std::uint8_t | ,
|  | std::uint8_t | ,
|  | const char * | ,
|  | int | ,
|  | const char * | ,
|  |  | ...
| ) |  |

YCLib 调试跟踪函数。

注解
  当定义宏 YB_Use_YTrace 不等于 0 时，宏 YTrace 操作由此函数实现。

自从
  build 553

## 变量说明

## ◆ get_first

const first_tag ystdex::get_first {}

操纵子。

自从
  build 288

在文件 iterator.hpp 第 559 行定义.

## ◆ get_get

const struct ystdex::get_get_t ystdex::get_get

被这些函数引用 YSLib::UI::MUIContainer::begin().

## ◆ get_indirect

const struct ystdex::get_indirect_t ystdex::get_indirect

## ◆ get_key

const first_tag ystdex::get_key {}

在文件 iterator.hpp 第 559 行定义.

被这些函数引用 YSLib::FetchFontFamilyNames(), YSLib::UI::FetchVisualStyleNames(), YSLib::UI::LocateForTrace() , 以及 YReader::ShlTextReader::SettingSession::SettingSession().

## ◆ get_second

const second_tag ystdex::get_second {}

在文件 iterator.hpp 第 560 行定义.

## ◆ get_value

const second_tag ystdex::get_value {}

在文件 iterator.hpp 第 560 行定义.

被这些函数引用 YSLib::UI::MUIContainer::begin(), YSLib::UI::MUIContainer::PaintVisibleChildren() , 以及 YSLib::GUIHost::~GUIHost().

## ◆ nullptr

const class ystdex::nullptr_t ystdex::nullptr = {}

被这些函数引用 YSLib::Drawing::FontCache::GetFontFamilyPtr() , 以及 YSLib::Drawing::FontFamily::GetTypefacePtr().