"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > What are the Restrictions and Allowances for Specialization within the std Namespace?

What are the Restrictions and Allowances for Specialization within the std Namespace?

Published on 2024-11-15
Browse:970

 What are the Restrictions and Allowances for Specialization within the std Namespace?

Specialization in the std Namespace: Restrictions and Allowances

Despite the ability to add explicit specializations to the std namespace, certain templates have explicit prohibitions. Understanding these restrictions is crucial to ensure the validity of code using std namespace specializations.

Templates Prohibited from Specialization

  • numeric_limits: Not allowed for non-arithmetic standard types (e.g., complex).
  • shared_ptr: Must be CopyConstructible, CopyAssignable, LessThanComparable, and convertible to bool.
  • weak_ptr: Must be CopyConstructible and CopyAssignable.
  • std::hash: Specializations must meet the requirements of class template hash.
  • type_traits: Explicit specializations of any class templates within are undefined unless specified.
  • Locales: Have required specializations.
  • istreambuf_iterator: Requires a trivial copy constructor, constexpr default constructor, and trivial destructor.
  • complex: Only float, double, and long double specializations are allowed.
  • atomic: Specializations must have a deleted copy constructor, copy assignment operator, and constexpr value constructor.
  • unary_function and binary_function: Deprecated and should not be specialized.

Additional Restrictions

  • Per clause 17.6.4.2.1, the behavior is undefined when adding declarations or definitions to namespace std or its sub-namespaces. Exceptions apply only for template specializations that depend on user-defined types and meet standard requirements.
  • It is forbidden to explicitly specialize any member function of a standard library class template, member function template, or member class template.

Templates Allowed for Specialization

Templates not explicitly prohibited can be specialized if they depend on user-defined types and meet the standard requirements for the original template.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3