允许用户向std命名空间添加显式特化。但是,我明确禁止某些模板专门化。

我可以和不能专门研究哪些模板?

最佳答案

宽松地引用标准:

  • numeric_limits不得专门用于非算术标准类型(例如complex<T>)
  • “[s] shared_ptr的特殊化应为CopyConstructible,CopyAssignable和LessThanComparable [并且]可转换为bool。”
  • weak_ptr的特化应该是CopyConstructible和CopyAssignable。”
  • “[std::hash]的[T]模板专业应满足类模板哈希的要求。”
  • <type_traits>中的任何内容:“除非另有说明,否则未定义为该子节中定义的任何类模板添加专门化的程序的行为。” (仅明确允许common_type的某些特殊化)
  • 语言环境具有某些必需的特化知识。
  • istreambuf_iterator的所有特化都应具有平凡的副本构造函数,constexpr默认构造函数和平凡的析构函数。
  • “未指定为float,double或long double以外的任何类型实例化类模板complex的效果。”我认为这意味着定义其他专业是没有意义的。
  • atomic模板的规范化和实例化应具有删除的副本构造函数,删除的副本分配运算符和constexpr值构造函数。”
  • “不建议使用类模板unary_functionbinary_function。程序不得声明这些模板的特殊化。”

  • 当然,总体条款17.6.4.2.1的第1句(感谢@sehe和@curiousguy):

    和句子2:

    关于c++ - 我可以和不能专门研究std namespace 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8513417/

    10-12 05:38