std 命名空间内的专业化限制
std 命名空间允许对其模板进行显式专业化,但存在特定限制。
禁止特化的模板:
根据 C 标准,以下模板不能在 std 命名空间内特化:
-
numeric_limits for non -算术类型(例如,complex): 仅算术类型可以特化。
-
shared_ptr 和weak_ptr: 必须满足可复制性、可分配性和比较的特定要求。
-
hash: 特化必须符合标准哈希类模板的要求。
-
类型特征 (): 特化行为除非明确允许,否则未定义(例如,仅允许某些 common_type 专业化)。
-
语言环境: 具有所需的专业化。
-
istreambuf_iterator: 需要简单的复制构造函数、默认构造函数和析构函数。
-
非浮点类型的复杂性:为其他类型定义专业化被认为是毫无意义的。
-
原子: 必须删除复制操作和 constexpr 值构造函数。
-
unary_function 和 binary_function: 专门化已弃用并禁止。
常规限制:
- 任何专业化不得与原始模板要求冲突。
- 除非明确指定,否则禁止标准库模板的显式专业化和实例化。
- 标准库类的成员函数、函数模板或成员类模板的显式特化是未定义的行为。
以上是std 命名空间中的专用模板有哪些限制?的详细内容。更多信息请关注PHP中文网其他相关文章!